@Override protected void doGet(HttpAction action) { // Assume success - do the set up before grabbing the lock. // Sets content type. MediaType mediaType = ActionLib.contentNegotationRDF(action); ServletOutputStream output; try { output = action.response.getOutputStream(); } catch (IOException ex) { ServletOps.errorOccurred(ex); output = null; } TypedOutputStream out = new TypedOutputStream(output, mediaType); Lang lang = RDFLanguages.contentTypeToLang(mediaType.getContentType()); if (action.verbose) action.log.info( format( "[%d] Get: Content-Type=%s, Charset=%s => %s", action.id, mediaType.getContentType(), mediaType.getCharset(), lang.getName())); action.beginRead(); setCommonHeaders(action.response); try { Target target = determineTarget(action); if (action.log.isDebugEnabled()) action.log.debug("GET->" + target); boolean exists = target.exists(); if (!exists) ServletOps.errorNotFound("No such graph: <" + target.name + ">"); // If we want to set the Content-Length, we need to buffer. // response.setContentLength(??) ; String ct = lang.getContentType().toHeaderString(); action.response.setContentType(ct); Graph g = target.graph(); // Special case RDF/XML to be the plain (faster, less readable) form RDFFormat fmt = (lang == Lang.RDFXML) ? RDFFormat.RDFXML_PLAIN : RDFWriterRegistry.defaultSerialization(lang); try { RDFDataMgr.write(out, g, fmt); } catch (JenaException ex) { // Some RDF/XML data is unwritable. All we can do is pretend it's a bad // request (inappropriate content type). // Good news - this happens before any output for RDF/XML-ABBREV. if (fmt.getLang().equals(Lang.RDFXML)) ServletOps.errorBadRequest("Failed to write output in RDF/XML: " + ex.getMessage()); else ServletOps.errorOccurred("Failed to write output: " + ex.getMessage(), ex); } ServletOps.success(action); } finally { action.endRead(); } }
@Override public Lang getLang() { return format.getLang(); }