@@ -232,8 +232,12 @@ public Response selectPost(@QueryParam("output") String resultType, @Context Htt
232
232
*/
233
233
private Response select (String query , String resultType , HttpServletRequest request ) {
234
234
try {
235
+ // MARMOTTA-606 - check all "Accept" Headers, not only the first one
236
+ List <ContentType > acceptedTypes = MarmottaHttpUtils .parseAcceptHeader (request .getHeaders (ACCEPT ));
235
237
String acceptHeader = StringUtils .defaultString (request .getHeader (ACCEPT ), "" );
236
238
if (StringUtils .isBlank (query )) { //empty query
239
+ // combine the list of accepted types to search for HTML header
240
+ acceptHeader = StringUtils .join (acceptedTypes , "," );
237
241
if (acceptHeader .contains ("html" )) {
238
242
return Response .seeOther (new URI (configurationService .getServerUri () + "sparql/admin/squebi.html" )).build ();
239
243
} else {
@@ -242,13 +246,14 @@ private Response select(String query, String resultType, HttpServletRequest requ
242
246
} else {
243
247
//query duck typing
244
248
QueryType queryType = sparqlService .getQueryType (QueryLanguage .SPARQL , query );
245
- List <ContentType > acceptedTypes ;
249
+ // List<ContentType> acceptedTypes;
246
250
List <ContentType > offeredTypes ;
247
251
if (resultType != null ) {
248
252
acceptedTypes = MarmottaHttpUtils .parseAcceptHeader (resultType );
249
- } else {
250
- acceptedTypes = MarmottaHttpUtils .parseAcceptHeader (acceptHeader );
251
- }
253
+ }
254
+ // else {
255
+ // acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(acceptHeader);
256
+ // }
252
257
if (QueryType .TUPLE .equals (queryType )) {
253
258
offeredTypes = MarmottaHttpUtils .parseQueryResultFormatList (TupleQueryResultWriterRegistry .getInstance ().getKeys ());
254
259
} else if (QueryType .BOOL .equals (queryType )) {
@@ -389,7 +394,8 @@ private Response update(String update, String resultType, HttpServletRequest req
389
394
return Response .ok ().build ();
390
395
} else {
391
396
if (resultType == null ) {
392
- List <ContentType > acceptedTypes = MarmottaHttpUtils .parseAcceptHeader (request .getHeader (ACCEPT ));
397
+ // MARMOTTA-606: Check all provdes accept headers, not only the first one
398
+ List <ContentType > acceptedTypes = MarmottaHttpUtils .parseAcceptHeader (request .getHeaders (ACCEPT ));
393
399
List <ContentType > offeredTypes = MarmottaHttpUtils .parseStringList (Lists .newArrayList ("*/*" , "text/html" ));
394
400
ContentType bestType = MarmottaHttpUtils .bestContentType (offeredTypes , acceptedTypes );
395
401
if (bestType != null ) {
@@ -464,7 +470,8 @@ private Response createServiceDescriptionResponse(final HttpServletRequest reque
464
470
if (StringUtils .isBlank (request .getHeader (ACCEPT ))) {
465
471
acceptedTypes = Collections .singletonList (MarmottaHttpUtils .parseContentType (RDFXML .getDefaultMIMEType ()));
466
472
} else {
467
- acceptedTypes = MarmottaHttpUtils .parseAcceptHeader (request .getHeader (ACCEPT ));
473
+ // MARMOTTA-606 - retrieve all headers instead of the first one
474
+ acceptedTypes = MarmottaHttpUtils .parseAcceptHeader (request .getHeaders (ACCEPT ));
468
475
}
469
476
470
477
ContentType _bestType = null ;
0 commit comments