You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by dg...@apache.org on 2015/04/07 10:10:25 UTC
marmotta git commit: #marmotta-606
Repository: marmotta
Updated Branches:
refs/heads/master eb5a77a1f -> fc246cc6f
#marmotta-606
in sparqlwebservice, only the first "Accept" header of the
HttpServletRequest was checked.
Added method in MarmottaHttpUtils#parseAcceptHeader(Enumeration)
to return the ordered list of content types.
Changed SparqlWebService to check the list
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/fc246cc6
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/fc246cc6
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/fc246cc6
Branch: refs/heads/master
Commit: fc246cc6f09adceafaffbdfa36d70d414233b586
Parents: eb5a77a
Author: Dietmar Glachs <dg...@gmail.com>
Authored: Tue Apr 7 10:10:10 2015 +0200
Committer: Dietmar Glachs <dg...@gmail.com>
Committed: Tue Apr 7 10:10:10 2015 +0200
----------------------------------------------------------------------
.../commons/http/MarmottaHttpUtils.java | 34 ++++++++++++++++++++
.../sparql/webservices/SparqlWebService.java | 19 +++++++----
2 files changed, 47 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/marmotta/blob/fc246cc6/commons/marmotta-commons/src/main/java/org/apache/marmotta/commons/http/MarmottaHttpUtils.java
----------------------------------------------------------------------
diff --git a/commons/marmotta-commons/src/main/java/org/apache/marmotta/commons/http/MarmottaHttpUtils.java b/commons/marmotta-commons/src/main/java/org/apache/marmotta/commons/http/MarmottaHttpUtils.java
index 199dde9..102c991 100644
--- a/commons/marmotta-commons/src/main/java/org/apache/marmotta/commons/http/MarmottaHttpUtils.java
+++ b/commons/marmotta-commons/src/main/java/org/apache/marmotta/commons/http/MarmottaHttpUtils.java
@@ -18,20 +18,54 @@
package org.apache.marmotta.commons.http;
import org.apache.commons.lang3.StringUtils;
+
import org.openrdf.query.resultio.QueryResultFormat;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Enumeration;
import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+
/**
* Add file description here!
* <p/>
* Author: Sebastian Schaffert
*/
public class MarmottaHttpUtils {
+ public static final String ACCEPT = "Accept";
+ /**
+ * A utility method for parsing Content-Type and Accept header
+ * @param request the {@link HttpServletRequest} provided
+ * @return An ordered list of {@link ContentType} elements
+ */
+ public static List<ContentType> parseAcceptHeader(HttpServletRequest request) {
+ Enumeration<String> acceptHeaderStrings = request.getHeaders(ACCEPT);
+ return parseAcceptHeader(acceptHeaderStrings);
+ }
+ /**
+ * A utility method for parsing Content-Type out of the provided Accept headers.
+ *
+ * @param request the {@link HttpServletRequest} provided
+ * @return An ordered list of {@link ContentType} elements.
+ * @see HttpServletRequest#getHeaders(String)
+ */
+ public static List<ContentType> parseAcceptHeader(Enumeration<String> acceptHeaderStrings) {
+ List<ContentType> contentTypes = new ArrayList<>();
+ while ( acceptHeaderStrings.hasMoreElements() ) {
+ ContentType contentType = parseContentType(acceptHeaderStrings.nextElement());
+ if ( contentType != null ) {
+ contentTypes.add(contentType);
+ }
+ }
+ //
+ Collections.sort(contentTypes);
+
+ return contentTypes;
+ }
/**
* A utility method for parsing HTTP Content-Type and Accept header, taking into account different parameters that
http://git-wip-us.apache.org/repos/asf/marmotta/blob/fc246cc6/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/webservices/SparqlWebService.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/webservices/SparqlWebService.java b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/webservices/SparqlWebService.java
index 3fde761..6db8476 100644
--- a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/webservices/SparqlWebService.java
+++ b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/webservices/SparqlWebService.java
@@ -232,8 +232,12 @@ public class SparqlWebService {
*/
private Response select(String query, String resultType, HttpServletRequest request) {
try {
+ // MARMOTTA-606 - check all "Accept" Headers, not only the first one
+ List<ContentType> acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(request.getHeaders(ACCEPT));
String acceptHeader = StringUtils.defaultString(request.getHeader(ACCEPT), "");
if (StringUtils.isBlank(query)) { //empty query
+ // combine the list of accepted types to search for HTML header
+ acceptHeader = StringUtils.join(acceptedTypes, ",");
if (acceptHeader.contains("html")) {
return Response.seeOther(new URI(configurationService.getServerUri() + "sparql/admin/squebi.html")).build();
} else {
@@ -242,13 +246,14 @@ public class SparqlWebService {
} else {
//query duck typing
QueryType queryType = sparqlService.getQueryType(QueryLanguage.SPARQL, query);
- List<ContentType> acceptedTypes;
+ // List<ContentType> acceptedTypes;
List<ContentType> offeredTypes;
if (resultType != null) {
acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(resultType);
- } else {
- acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(acceptHeader);
- }
+ }
+// else {
+// acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(acceptHeader);
+// }
if (QueryType.TUPLE.equals(queryType)) {
offeredTypes = MarmottaHttpUtils.parseQueryResultFormatList(TupleQueryResultWriterRegistry.getInstance().getKeys());
} else if (QueryType.BOOL.equals(queryType)) {
@@ -389,7 +394,8 @@ public class SparqlWebService {
return Response.ok().build();
} else {
if (resultType == null) {
- List<ContentType> acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(request.getHeader(ACCEPT));
+ // MARMOTTA-606: Check all provdes accept headers, not only the first one
+ List<ContentType> acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(request.getHeaders(ACCEPT));
List<ContentType> offeredTypes = MarmottaHttpUtils.parseStringList(Lists.newArrayList("*/*", "text/html"));
ContentType bestType = MarmottaHttpUtils.bestContentType(offeredTypes, acceptedTypes);
if (bestType != null) {
@@ -464,7 +470,8 @@ public class SparqlWebService {
if (StringUtils.isBlank(request.getHeader(ACCEPT))) {
acceptedTypes = Collections.singletonList(MarmottaHttpUtils.parseContentType(RDFXML.getDefaultMIMEType()));
} else {
- acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(request.getHeader(ACCEPT));
+ // MARMOTTA-606 - retrieve all headers instead of the first one
+ acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(request.getHeaders(ACCEPT));
}
ContentType _bestType = null;