diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java index e3cb914a8..6a39a184f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java @@ -51,6 +51,7 @@ public class VitroHttpServlet extends HttpServlet implements MultipartRequestWra public final static String RDFXML_MIMETYPE = "application/rdf+xml"; public final static String JSON_MIMETYPE = "application/json"; + public final static String JSON_LD_MIMETYPE = "application/ld+json"; public final static String N3_MIMETYPE = "text/n3"; // unofficial and unregistered public final static String TTL_MIMETYPE = "text/turtle"; // unofficial and unregistered diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/SparqlQueryApiController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/SparqlQueryApiController.java index e1d938c92..cd6e92c6d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/SparqlQueryApiController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/SparqlQueryApiController.java @@ -80,7 +80,7 @@ public class SparqlQueryApiController extends VitroApiServlet { } catch (NotAcceptableException | AcceptHeaderParsingException e) { sendShortResponse(SC_NOT_ACCEPTABLE, "The accept header does not include any " - + "available content type.", e, resp); + + "available content type: " + e.getMessage(), resp); } catch (RDFServiceException e) { sendShortResponse(SC_INTERNAL_SERVER_ERROR, "Problem executing the query.", e, resp); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/sparqlquery/RdfResultMediaType.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/sparqlquery/RdfResultMediaType.java index f2f98b76d..72d744ce4 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/sparqlquery/RdfResultMediaType.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/sparqlquery/RdfResultMediaType.java @@ -20,7 +20,9 @@ public enum RdfResultMediaType { TTL("text/turtle", false, "N3", "TTL"), - JSON("application/json", false, "N3", "JSON"); + JSON("application/json", false, "N3", "JSON"), + + JSON_LD("application/ld+json", false, "N3", "JSON"); // ---------------------------------------------------------------------- // Keep a map of content types, for easy conversion back and forth diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/sparqlquery/SparqlQueryApiRdfProducer.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/sparqlquery/SparqlQueryApiRdfProducer.java index 939428da4..57b9a2b9a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/sparqlquery/SparqlQueryApiRdfProducer.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/api/sparqlquery/SparqlQueryApiRdfProducer.java @@ -55,7 +55,7 @@ abstract class SparqlQueryApiRdfProducer extends SparqlQueryApiExecutor { if (mediaType.isNativeFormat()) { IOUtils.copy(rawResult, out); - } else if (mediaType == RdfResultMediaType.JSON) { + } else if (mediaType.getJenaResponseFormat().equals("JSON")) { // JSON-LD is a special case, since jena 2.6.4 doesn't support it. try { JenaRDFParser parser = new JenaRDFParser(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java index e1d4385c8..560dcb85b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java @@ -325,7 +325,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { String mediaType = values.getContentType().getMediaType(); response.setContentType(mediaType); - if ( JSON_MIMETYPE.equals(mediaType)){ + if ( JSON_MIMETYPE.equals(mediaType) || JSON_LD_MIMETYPE.equals(mediaType)){ //json-ld is not supported by jena v2.6.4 try { JenaRDFParser parser = new JenaRDFParser(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualController.java index cab2a0a23..4c14f4a9c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualController.java @@ -45,6 +45,7 @@ public class IndividualController extends FreemarkerHttpServlet { map.put(XHTML_MIMETYPE, 0.5f); map.put("application/xml", 0.5f); map.put(JSON_MIMETYPE, 1.0f); + map.put(JSON_LD_MIMETYPE, 1.0f); map.put(RDFXML_MIMETYPE, 1.0f); map.put(RDFXML_MIMETYPE, 1.0f); map.put(N3_MIMETYPE, 1.0f); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualRequestAnalyzer.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualRequestAnalyzer.java index 24c69d358..25079fc23 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualRequestAnalyzer.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualRequestAnalyzer.java @@ -2,10 +2,11 @@ package edu.cornell.mannlib.vitro.webapp.controller.individual; +import static edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet.JSON_LD_MIMETYPE; +import static edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet.JSON_MIMETYPE; import static edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet.N3_MIMETYPE; import static edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet.RDFXML_MIMETYPE; import static edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet.TTL_MIMETYPE; -import static edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet.JSON_MIMETYPE; import java.util.Map; import java.util.regex.Matcher; @@ -118,7 +119,7 @@ public class IndividualRequestAnalyzer { return "/individual/" + m.group(1) + "/" + m.group(1) + ".n3"; } else if (TTL_MIMETYPE.equals(mediaType)) { return "/individual/" + m.group(1) + "/" + m.group(1) + ".ttl"; - } else if (JSON_MIMETYPE.equals(mediaType)){ + } else if (JSON_MIMETYPE.equals(mediaType) || JSON_LD_MIMETYPE.equals(mediaType)){ return "/individual/" + m.group(1) + "/" + m.group(1) + ".jsonld"; } } @@ -145,7 +146,8 @@ public class IndividualRequestAnalyzer { IndividualController.ACCEPTED_CONTENT_TYPES); if (RDFXML_MIMETYPE.equals(ctStr) || N3_MIMETYPE.equals(ctStr) - || TTL_MIMETYPE.equals(ctStr) || JSON_MIMETYPE.equals(ctStr)) { + || TTL_MIMETYPE.equals(ctStr) || JSON_MIMETYPE.equals(ctStr) + || JSON_LD_MIMETYPE.equals(ctStr)) { return new ContentType(ctStr); } } catch (Throwable th) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/ContentType.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/ContentType.java index 02693d654..42f25f521 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/ContentType.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/ContentType.java @@ -151,6 +151,12 @@ public class ContentType implements Serializable { public static final ContentType JSON = new ContentType("application/json;" + DEFAULT_CHARSET).lock(); + /** + * A ContentType constant that describes the JSON-LD content type. + */ + public static final ContentType JSON_LD = + new ContentType("application/ld+json;" + DEFAULT_CHARSET).lock(); + /** * A ContentType constant that describes the Javascript content type. */