@Override
  public void handle(HttpExchange arg0) throws IOException {
    try {
      String jsons = IOUtils.toString(new InputStreamReader(arg0.getRequestBody(), "UTF-8"));

      JSONObject json = (JSONObject) JSONSerializer.toJSON(jsons);
      String email = json.getString("email");
      String key = json.getString("key");
      int start = json.getInt("start");
      int how_many = json.getInt("how_many");
      String session_id = json.getString("session_id");
      boolean order_by_source = true;
      boolean first_request = json.getBoolean("first");
      boolean taxonomic_constraint = true;

      if (json.containsKey("source_sorting")) {
        order_by_source = json.getBoolean("source_sorting");
      }

      if (json.containsKey("taxonomic_constraint")) {
        taxonomic_constraint = json.getBoolean("taxonomic_constraint");
      }

      TnrsJob job = JobHelper.readJobInfo("/tnrs-jobs/", email, key);

      JSONObject json_res = new JSONObject();

      if (job.getType() == TnrsJob.PARSING_JOB) {

        ParsingResultsFile data = new ParsingResultsFile(job, "/tnrs-jobs/");

        JSONArray results = data.getResultsInterval(start, how_many);

        json_res.put("items", results);
        json_res.put("total", data.getResultsSize());

      } else {
        MatchingResultsFile data =
            new MatchingResultsFile(job, "/tnrs-jobs/", session_id, first_request);

        JSONArray results =
            data.getResultsInterval(start, how_many, job, taxonomic_constraint, order_by_source);

        json_res.put("items", results);
        json_res.put("total", data.getResultsSize());
        data.close();
      }

      String result = json_res.toString();

      arg0.sendResponseHeaders(200, result.getBytes().length);
      arg0.setAttribute("Content-type", "application/json");

      OutputStreamWriter owr = new OutputStreamWriter(arg0.getResponseBody(), "UTF-8");
      BufferedWriter wr = new BufferedWriter(owr);
      wr.write(result);
      wr.flush();
      wr.close();

    } catch (Exception ex) {
      ex.printStackTrace();
      log.error(ExceptionUtils.getFullStackTrace(ex));
      throw new IOException(ex);
    }
  }