String format,
boolean report, boolean annotate
) throws IOException {
if (in == null) return;
if (!initRdfWriter(format, report, annotate)) return;
final ExtractionReport er;
try {
er = runner.extract(eps, in, rdfWriter);
rdfWriter.close();
if (! er.hasMatchingExtractors() ) {
sendError(
415,
"No suitable extractor found for this media type",
null,
er,
report
);
return;
}
} catch (IOException ioe) {
// IO Error.
if (ioe.getCause() != null && ValidatorException.class.equals(ioe.getCause().getClass())) {
final String errMsg = "Could not fetch input, IO Error.";
any23servlet.log(errMsg, ioe.getCause());
sendError(502, errMsg, ioe, null, report);
return;
}
any23servlet.log("Could not fetch input", ioe);
sendError(502, "Could not fetch input.", ioe, null, report);
return;
} catch (ExtractionException e) {
// Extraction error.
any23servlet.log("Could not parse input", e);
sendError(502, "Could not parse input.", e, null, report);
return;
} catch (Exception e) {
any23servlet.log("Internal error", e);
sendError(500, "Internal error.", e, null, report);
return;
}
/* *** No triples found. *** */
any23servlet.log("Extraction complete, " + reporter.getTotalTriples() + " triples");
if (reporter.getTotalTriples() == 0) {
sendError(
501,
"Extraction completed. No triples have been found.",
null,
er, report
);
return;
}
// Regular response.
response.setContentType(outputMediaType);
response.setStatus(200);
// Set the output encoding equals to the input one.
final String charsetEncoding = er.getEncoding();
if (Charset.isSupported(charsetEncoding)) {
response.setCharacterEncoding(er.getEncoding());
} else {
response.setCharacterEncoding("UTF-8");
}
final ServletOutputStream sos = response.getOutputStream();