This is an automated email from the ASF dual-hosted git repository. andy pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/main by this push:
new 435c098a8d GH-2700: Configurable server content negotiation
435c098a8d is described below
commit 435c098a8d009f32b4c48756bc702e40e5d16d02
Author: Andy Seaborne <[email protected]>
AuthorDate: Mon Sep 9 13:19:50 2024 +0100
GH-2700: Configurable server content negotiation
---
.../src/main/java/org/apache/jena/fuseki/DEF.java | 160 +++++++++++++--------
.../jena/fuseki/servlets/ResponseResultSet.java | 2 +-
2 files changed, 99 insertions(+), 63 deletions(-)
diff --git
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
index c6cc4b3f2d..55745df837 100644
---
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
+++
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/DEF.java
@@ -22,74 +22,110 @@ import org.apache.jena.atlas.web.AcceptList;
import org.apache.jena.atlas.web.MediaType;
import static org.apache.jena.riot.WebContent.*;
+/**
+ * Content negotiation setup.
+ */
public class DEF
{
- public static final MediaType acceptRDFXML =
MediaType.create(contentTypeRDFXML);
- public static final MediaType acceptNQuads =
MediaType.create(contentTypeNQuads);
- public static final MediaType acceptRSXML =
MediaType.create(contentTypeResultsXML);
- public static final MediaType acceptJSON =
MediaType.create(contentTypeJSON);
- public static final MediaType acceptTurtle =
MediaType.create(contentTypeTurtle);
-
- public static final AcceptList jsonOffer =
AcceptList.create(contentTypeJSON);
-
- public static final AcceptList constructOffer =
AcceptList.create(contentTypeTurtle,
-
contentTypeTurtleAlt1,
-
contentTypeNTriples,
-
contentTypeNTriplesAlt,
-
contentTypeRDFXML,
-
contentTypeTriX,
-
contentTypeTriXxml,
-
contentTypeJSONLD,
-
contentTypeRDFJSON,
-
contentTypeRDFThrift,
-
-
contentTypeTriG,
-
contentTypeTriGAlt1,
-
contentTypeNQuads,
-
contentTypeNQuadsAlt1
- );
-
- public static final AcceptList rdfOffer =
AcceptList.create(contentTypeTurtle,
-
contentTypeTurtleAlt1,
-
contentTypeNTriples,
-
contentTypeNTriplesAlt,
-
contentTypeRDFXML,
-
contentTypeTriX,
-
contentTypeTriXxml,
-
contentTypeJSONLD,
-
contentTypeRDFJSON,
-
contentTypeRDFThrift
- );
-
- public static final AcceptList quadsOffer =
AcceptList.create(contentTypeTriG,
-
contentTypeTriGAlt1,
-
contentTypeJSONLD,
-
contentTypeNQuads,
-
contentTypeNQuadsAlt1,
-
contentTypeTriX,
-
contentTypeTriXxml
- );
+ // @formatter:off
+
+ // ---- Server configuration default media type
+
+ public static MediaType acceptRDFXML = acceptRDFXMLDefault();
+ public static MediaType acceptNQuads = acceptNQuadsDefault();
+ public static MediaType acceptResultSetXML = acceptResultSetXMLDefault();
+ public static MediaType acceptJSON = acceptJSONDefault();
+ public static MediaType acceptTurtle = acceptTurtleDefault();
+
+ // ---- Server configuration offers for content negotiation
+
+ public static AcceptList jsonOffer = jsonOfferDefault();
+
+ public static AcceptList constructOffer = constructOfferDefault();
+
+ public static AcceptList rdfOffer = rdfOfferDefault();
+
+ public static AcceptList quadsOffer = quadsOfferDefault();
+
+ // Offer for SELECT
+ public static AcceptList rsOfferTable = rsOfferTableDefault();
+
+ // Offer for ASK
+ public static AcceptList rsOfferBoolean = rsOfferBooleanDefault();
+
+
+ // ---- Default configuration settings or when content negotiation does
not provide a media type.
+
+ public static final MediaType acceptRDFXMLDefault() { return
MediaType.create(contentTypeRDFXML); }
+ public static final MediaType acceptNQuadsDefault() { return
MediaType.create(contentTypeNQuads); }
+ public static final MediaType acceptResultSetXMLDefault() { return
MediaType.create(contentTypeResultsXML); }
+ public static final MediaType acceptJSONDefault() { return
MediaType.create(contentTypeJSON); }
+ public static final MediaType acceptTurtleDefault() { return
MediaType.create(contentTypeTurtle); }
+
+ // ---- Default offers for content negotiation.
+
+ public static final AcceptList jsonOfferDefault() { return
AcceptList.create(contentTypeJSON); }
+
+ public static final AcceptList constructOfferDefault() { return
AcceptList.create(contentTypeTurtle,
+
contentTypeTurtleAlt1,
+
contentTypeNTriples,
+
contentTypeNTriplesAlt,
+
contentTypeRDFXML,
+
contentTypeTriX,
+
contentTypeTriXxml,
+
contentTypeJSONLD,
+
contentTypeRDFJSON,
+
contentTypeRDFThrift,
+
+
contentTypeTriG,
+
contentTypeTriGAlt1,
+
contentTypeNQuads,
+
contentTypeNQuadsAlt1
+
); }
+
+ public static final AcceptList rdfOfferDefault() { return
AcceptList.create(contentTypeTurtle,
+
contentTypeTurtleAlt1,
+
contentTypeNTriples,
+
contentTypeNTriplesAlt,
+
contentTypeRDFXML,
+
contentTypeTriX,
+
contentTypeTriXxml,
+
contentTypeJSONLD,
+
contentTypeRDFJSON,
+
contentTypeRDFThrift
+
); }
+
+ public static final AcceptList quadsOfferDefault() { return
AcceptList.create(contentTypeTriG,
+
contentTypeTriGAlt1,
+
contentTypeJSONLD,
+
contentTypeNQuads,
+
contentTypeNQuadsAlt1,
+
contentTypeTriX,
+
contentTypeTriXxml
+
); }
// Offer for SELECT
// This include application/xml and application/json.
- public static final AcceptList rsOfferTable =
AcceptList.create(contentTypeResultsJSON,
-
contentTypeJSON,
-
contentTypeTextCSV,
-
contentTypeTextTSV,
-
contentTypeResultsXML,
-
contentTypeXML,
-
contentTypeResultsThrift,
-
contentTypeTextPlain
- );
+ public static final AcceptList rsOfferTableDefault() { return
AcceptList.create(contentTypeResultsJSON,
+
contentTypeJSON,
+
contentTypeTextCSV,
+
contentTypeTextTSV,
+
contentTypeResultsXML,
+
contentTypeXML,
+
contentTypeResultsThrift,
+
contentTypeTextPlain
+
); }
// Offer for ASK
// This includes application/xml and application/json and excludes
application/sparql-results+thrift
- public static final AcceptList rsOfferBoolean =
AcceptList.create(contentTypeResultsJSON,
-
contentTypeJSON,
-
contentTypeTextCSV,
-
contentTypeTextTSV,
-
contentTypeResultsXML,
-
contentTypeXML,
-
contentTypeTextPlain
- );
+ public static final AcceptList rsOfferBooleanDefault() { return
AcceptList.create(contentTypeResultsJSON,
+
contentTypeJSON,
+
contentTypeTextCSV,
+
contentTypeTextTSV,
+
contentTypeResultsXML,
+
contentTypeXML,
+
contentTypeTextPlain
+
); }
+
+ // @formatter:on
}
diff --git
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java
index e9a556d236..c20e35bcc1 100644
---
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java
+++
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java
@@ -105,7 +105,7 @@ public class ResponseResultSet
String mimeType = null;
// -- Conneg
- MediaType i = ConNeg.chooseContentType(request, contentTypeOffer,
DEF.acceptRSXML);
+ MediaType i = ConNeg.chooseContentType(request, contentTypeOffer,
DEF.acceptResultSetXML);
if ( i != null )
mimeType = i.getContentTypeStr();
