MARMOTTA-578: some code cleanup to fit with our code conventions
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/64b71b6f Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/64b71b6f Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/64b71b6f Branch: refs/heads/maintenance-3.3.x Commit: 64b71b6f3c56d4b578a6ac6baac65a385c680569 Parents: da046cd Author: Sergio Fernández <[email protected]> Authored: Tue Dec 9 09:53:18 2014 +0100 Committer: Sergio Fernández <[email protected]> Committed: Tue Dec 9 20:26:53 2014 +0100 ---------------------------------------------------------------------- .../sparql/test/ComplexKiWiSparqlQueryTest.java | 3 - .../kiwi/sparql/test/ContextAwareTest.java | 2 - .../kiwi/sparql/test/KiWiSparqlUpdateTest.java | 3 +- .../testsuite/KiWiSparqlComplianceTest.java | 1 - .../persistence/pgsql/PostgreSQLDialect.java | 2 - .../kiwi/test/junit/KiWiDatabaseRunner.java | 4 +- .../sparql/webservices/SparqlWebService.java | 237 ++++++++++--------- 7 files changed, 123 insertions(+), 129 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/64b71b6f/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/ComplexKiWiSparqlQueryTest.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/ComplexKiWiSparqlQueryTest.java b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/ComplexKiWiSparqlQueryTest.java index e4ddca5..4126495 100644 --- a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/ComplexKiWiSparqlQueryTest.java +++ b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/ComplexKiWiSparqlQueryTest.java @@ -28,17 +28,14 @@ import org.openrdf.query.parser.sparql.ComplexSPARQLQueryTest; import org.openrdf.repository.Repository; import org.openrdf.repository.sail.SailRepository; - /** * Run the Sesame Complex SPARQL Query Test Suite. * @author Jakob Frank <[email protected]> - * */ @RunWith(KiWiDatabaseRunner.class) public class ComplexKiWiSparqlQueryTest extends ComplexSPARQLQueryTest { - private final KiWiConfiguration config; public ComplexKiWiSparqlQueryTest(KiWiConfiguration config) { http://git-wip-us.apache.org/repos/asf/marmotta/blob/64b71b6f/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/ContextAwareTest.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/ContextAwareTest.java b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/ContextAwareTest.java index 3b6fe3e..93cced3 100644 --- a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/ContextAwareTest.java +++ b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/ContextAwareTest.java @@ -60,7 +60,6 @@ public class ContextAwareTest { private Repository repository; - private URI context1, context2; private URI subject, object11, object21; @@ -73,7 +72,6 @@ public class ContextAwareTest { this.dbConfig = dbConfig; } - @Before public void initDatabase() throws RepositoryException, IOException, RDFParseException { store = new KiWiStore(dbConfig); http://git-wip-us.apache.org/repos/asf/marmotta/blob/64b71b6f/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlUpdateTest.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlUpdateTest.java b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlUpdateTest.java index 8ca351d..4eaf946 100644 --- a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlUpdateTest.java +++ b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlUpdateTest.java @@ -41,6 +41,7 @@ import static org.junit.Assert.assertTrue; /** * Run the Sesame SPARQL Update Test Suite. + * * @author Jakob Frank <[email protected]> * */ @@ -60,7 +61,6 @@ public class KiWiSparqlUpdateTest extends SPARQLUpdateTest { return new SailRepository(ssail); } - /** * This bug is apparently an issue in Sesame and does not really concern our own SPARQL implementation. Not sure * how to work around it. @@ -99,4 +99,5 @@ public class KiWiSparqlUpdateTest extends SPARQLUpdateTest { assertFalse(msg, con.hasStatement(alice, FOAF.KNOWS, bob, true, graph2)); assertFalse(msg, con.hasStatement(alice, FOAF.MBOX, f.createLiteral("[email protected]"), true, graph2)); } + } http://git-wip-us.apache.org/repos/asf/marmotta/blob/64b71b6f/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/testsuite/KiWiSparqlComplianceTest.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/testsuite/KiWiSparqlComplianceTest.java b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/testsuite/KiWiSparqlComplianceTest.java index d73abd1..1c299db 100644 --- a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/testsuite/KiWiSparqlComplianceTest.java +++ b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/testsuite/KiWiSparqlComplianceTest.java @@ -62,7 +62,6 @@ import java.util.Set; @RunWith(KiWiDatabaseRunner.class) public class KiWiSparqlComplianceTest { - private KiWiStore store; private KiWiSparqlSail ssail; http://git-wip-us.apache.org/repos/asf/marmotta/blob/64b71b6f/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/pgsql/PostgreSQLDialect.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/pgsql/PostgreSQLDialect.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/pgsql/PostgreSQLDialect.java index a2645d6..4bab692 100644 --- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/pgsql/PostgreSQLDialect.java +++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/pgsql/PostgreSQLDialect.java @@ -142,7 +142,6 @@ public class PostgreSQLDialect extends KiWiDialect { return true; } - /** * Return true in case the database supports creating arrays with ARRAY[...] * @@ -153,5 +152,4 @@ public class PostgreSQLDialect extends KiWiDialect { return true; } - } http://git-wip-us.apache.org/repos/asf/marmotta/blob/64b71b6f/libraries/kiwi/kiwi-triplestore/src/test/java/org/apache/marmotta/kiwi/test/junit/KiWiDatabaseRunner.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-triplestore/src/test/java/org/apache/marmotta/kiwi/test/junit/KiWiDatabaseRunner.java b/libraries/kiwi/kiwi-triplestore/src/test/java/org/apache/marmotta/kiwi/test/junit/KiWiDatabaseRunner.java index a483a7f..1f01f3d 100644 --- a/libraries/kiwi/kiwi-triplestore/src/test/java/org/apache/marmotta/kiwi/test/junit/KiWiDatabaseRunner.java +++ b/libraries/kiwi/kiwi-triplestore/src/test/java/org/apache/marmotta/kiwi/test/junit/KiWiDatabaseRunner.java @@ -52,7 +52,7 @@ import java.util.List; * <ul> * <li>PostgreSQL: * <ul> - * <li>postgresql.url, e.g. jdbc:postgresql://localhost:5433/kiwitest?prepareThreshold=3</li> + * <li>postgresql.url, e.g. jdbc:postgresql://localhost:5432/kiwitest?prepareThreshold=3</li> * <li>postgresql.user (default: kiwi)</li> * <li>postgresql.pass (default: kiwi)</li> * </ul> @@ -314,7 +314,6 @@ public class KiWiDatabaseRunner extends Suite { private class ExecutionLogger extends TestWatcher implements MethodRule { - @Override public Statement apply(final Statement base, final FrameworkMethod method, Object target) { @@ -348,5 +347,4 @@ public class KiWiDatabaseRunner extends Suite { return getTestClass().getAnnotatedFields(KiWiConfig.class); } - } http://git-wip-us.apache.org/repos/asf/marmotta/blob/64b71b6f/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..5ee8aa3 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 @@ -79,20 +79,20 @@ import static org.openrdf.rio.RDFFormat.RDFXML; @ApplicationScoped @Path("/" + SparqlWebService.PATH) public class SparqlWebService { - + public static final String PATH = "sparql"; public static final String SELECT = "/select"; public static final String UPDATE = "/update"; - private static final Map<String,String> outputMapper = new HashMap<String,String>(){ - private static final long serialVersionUID = 1L; - { - put("json","application/sparql-results+json"); - put("xml","application/sparql-results+xml"); - put("tabs","text/tab-separated-values"); - put("csv","text/csv"); - put("html","text/html"); - }}; + private static final Map<String,String> outputMapper = new HashMap<String, String>() { + { + put("json","application/sparql-results+json"); + put("xml","application/sparql-results+xml"); + put("tabs","text/tab-separated-values"); + put("csv","text/csv"); + put("html","text/html"); + } + }; @Inject private Logger log; @@ -121,17 +121,17 @@ public class SparqlWebService { */ @GET public Response get(@QueryParam("query") String query, @QueryParam("update") String update, @Context HttpServletRequest request) throws URISyntaxException { - if (StringUtils.isNotBlank(update)) { - String msg = "update operations are not supported through get"; //or yes? - log.error(msg); - return Response.status(Response.Status.BAD_REQUEST).entity(msg).build(); - } else { - UriBuilder builder = UriBuilder.fromPath(PATH + SELECT); - if (StringUtils.isNotBlank(query)) { - builder.replaceQuery(request.getQueryString()); - } - return Response.seeOther(builder.build()).build(); - } + if (StringUtils.isNotBlank(update)) { + String msg = "update operations are not supported through get"; //or yes? + log.error(msg); + return Response.status(Response.Status.BAD_REQUEST).entity(msg).build(); + } else { + UriBuilder builder = UriBuilder.fromPath(PATH + SELECT); + if (StringUtils.isNotBlank(query)) { + builder.replaceQuery(request.getQueryString()); + } + return Response.seeOther(builder.build()).build(); + } } /** @@ -142,11 +142,11 @@ public class SparqlWebService { */ @POST public Response post(@Context HttpServletRequest request) { - //String query = CharStreams.toString(request.getReader()); - //TODO: introspect the query to determine the operation type - String msg = "impossible to determine which type of operation (query/update) the request contains"; - log.error(msg); - return Response.status(Response.Status.CONFLICT).entity(msg).build(); + //String query = CharStreams.toString(request.getReader()); + //TODO: introspect the query to determine the operation type + String msg = "impossible to determine which type of operation (query/update) the request contains"; + log.error(msg); + return Response.status(Response.Status.CONFLICT).entity(msg).build(); } /** @@ -167,8 +167,10 @@ public class SparqlWebService { if (StringUtils.isBlank(query)) { return createServiceDescriptionResponse(request, false); } - //get real return type: even it is not in the standard, this is useful - if(resultType != null && outputMapper.containsKey(resultType)) resultType = outputMapper.get(resultType); + //get real return type: even it is not in the standard, this is useful + if(resultType != null && outputMapper.containsKey(resultType)) { + resultType = outputMapper.get(resultType); + } return select(query, resultType, request); } @@ -207,19 +209,19 @@ public class SparqlWebService { @POST @Path(SELECT) public Response selectPost(@QueryParam("output") String resultType, @Context HttpServletRequest request) { - try { - if(resultType != null && outputMapper.containsKey(resultType)) resultType = outputMapper.get(resultType); - if(request.getCharacterEncoding() == null) { + try { + if (resultType != null && outputMapper.containsKey(resultType)) resultType = outputMapper.get(resultType); + if (request.getCharacterEncoding() == null) { request.setCharacterEncoding("utf-8"); } - String query = CharStreams.toString(request.getReader()); + String query = CharStreams.toString(request.getReader()); //String query = IOUtils.toString(request.getInputStream(),"utf-8"); - log.debug("Query: {}",query); - return select(query, resultType, request); - } catch (IOException e) { - log.error("body not found", e); - return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); - } + log.debug("Query: {}", query); + return select(query, resultType, request); + } catch (IOException e) { + log.error("body not found", e); + return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); + } } /** @@ -230,54 +232,54 @@ public class SparqlWebService { * @param request * @return */ - private Response select(String query, String resultType, HttpServletRequest request) { - try { - String acceptHeader = StringUtils.defaultString(request.getHeader(ACCEPT), ""); - if (StringUtils.isBlank(query)) { //empty query - if (acceptHeader.contains("html")) { - return Response.seeOther(new URI(configurationService.getServerUri() + "sparql/admin/squebi.html")).build(); - } else { - return Response.status(Status.ACCEPTED).entity("no SPARQL query specified").build(); - } - } else { - //query duck typing - QueryType queryType = sparqlService.getQueryType(QueryLanguage.SPARQL, query); - List<ContentType> acceptedTypes; - List<ContentType> offeredTypes; - if (resultType != null) { - acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(resultType); - } else { - acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(acceptHeader); - } - if (QueryType.TUPLE.equals(queryType)) { - offeredTypes = MarmottaHttpUtils.parseQueryResultFormatList(TupleQueryResultWriterRegistry.getInstance().getKeys()); - } else if (QueryType.BOOL.equals(queryType)) { - offeredTypes = MarmottaHttpUtils.parseQueryResultFormatList(BooleanQueryResultWriterRegistry.getInstance().getKeys()); - } else if (QueryType.GRAPH.equals(queryType)) { - Set<String> producedTypes = new HashSet<String>(exportService.getProducedTypes()); - producedTypes.remove("application/xml"); - producedTypes.remove("text/plain"); - producedTypes.remove("text/html"); - producedTypes.remove("application/xhtml+xml"); - offeredTypes = MarmottaHttpUtils.parseStringList(producedTypes); - } else { - return Response.status(Response.Status.BAD_REQUEST).entity("no result format specified or unsupported result format").build(); - } - ContentType bestType = MarmottaHttpUtils.bestContentType(offeredTypes, acceptedTypes); - if (bestType == null) { - return Response.status(Response.Status.UNSUPPORTED_MEDIA_TYPE).entity("no result format specified or unsupported result format").build(); - } else { - return buildQueryResponse(bestType, query, queryType); - } - } + private Response select(String query, String resultType, HttpServletRequest request) { + try { + String acceptHeader = StringUtils.defaultString(request.getHeader(ACCEPT), ""); + if (StringUtils.isBlank(query)) { //empty query + if (acceptHeader.contains("html")) { + return Response.seeOther(new URI(configurationService.getServerUri() + "sparql/admin/squebi.html")).build(); + } else { + return Response.status(Status.ACCEPTED).entity("no SPARQL query specified").build(); + } + } else { + //query duck typing + QueryType queryType = sparqlService.getQueryType(QueryLanguage.SPARQL, query); + List<ContentType> acceptedTypes; + List<ContentType> offeredTypes; + if (resultType != null) { + acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(resultType); + } else { + acceptedTypes = MarmottaHttpUtils.parseAcceptHeader(acceptHeader); + } + if (QueryType.TUPLE.equals(queryType)) { + offeredTypes = MarmottaHttpUtils.parseQueryResultFormatList(TupleQueryResultWriterRegistry.getInstance().getKeys()); + } else if (QueryType.BOOL.equals(queryType)) { + offeredTypes = MarmottaHttpUtils.parseQueryResultFormatList(BooleanQueryResultWriterRegistry.getInstance().getKeys()); + } else if (QueryType.GRAPH.equals(queryType)) { + Set<String> producedTypes = new HashSet<String>(exportService.getProducedTypes()); + producedTypes.remove("application/xml"); + producedTypes.remove("text/plain"); + producedTypes.remove("text/html"); + producedTypes.remove("application/xhtml+xml"); + offeredTypes = MarmottaHttpUtils.parseStringList(producedTypes); + } else { + return Response.status(Response.Status.BAD_REQUEST).entity("no result format specified or unsupported result format").build(); + } + ContentType bestType = MarmottaHttpUtils.bestContentType(offeredTypes, acceptedTypes); + if (bestType == null) { + return Response.status(Response.Status.UNSUPPORTED_MEDIA_TYPE).entity("no result format specified or unsupported result format").build(); + } else { + return buildQueryResponse(bestType, query, queryType); + } + } } catch (InvalidArgumentException e) { log.error("query parsing threw an exception", e); return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); - } catch(Exception e) { + } catch (Exception e) { log.error("query execution threw an exception", e); return Response.serverError().entity("query not supported").build(); } - } + } /** * For CORS operations TODO: make it more fine grained (maybe user dependent) @@ -318,10 +320,10 @@ public class SparqlWebService { @GET @Path(UPDATE) public Response updateGet(@QueryParam("update") String update, @QueryParam("query") String query, @QueryParam("output") String resultType, @Context HttpServletRequest request) { - String q = getUpdateQuery(update, query); - if (StringUtils.isBlank(q)) { - return createServiceDescriptionResponse(request, true); - } + String q = getUpdateQuery(update, query); + if (StringUtils.isBlank(q)) { + return createServiceDescriptionResponse(request, true); + } return update(q, resultType, request); } @@ -341,15 +343,15 @@ public class SparqlWebService { @Path(UPDATE) @Consumes("application/sparql-update") public Response updatePostDirectly(@Context HttpServletRequest request, @QueryParam("output") String resultType) { - try { - if(request.getCharacterEncoding() == null) { + try { + if (request.getCharacterEncoding() == null) { request.setCharacterEncoding("utf-8"); } - String q = CharStreams.toString(request.getReader()); - return update(q, resultType, request); - } catch (IOException e) { - return Response.serverError().entity(WebServiceUtil.jsonErrorResponse(e)).build(); - } + String q = CharStreams.toString(request.getReader()); + return update(q, resultType, request); + } catch (IOException e) { + return Response.serverError().entity(WebServiceUtil.jsonErrorResponse(e)).build(); + } } /** @@ -368,22 +370,22 @@ public class SparqlWebService { @Path(UPDATE) @Consumes({"application/x-www-url-form-urlencoded", "application/x-www-form-urlencoded"}) public Response updatePostUrlEncoded(@Context HttpServletRequest request) { - try { - Map<String,String> params = parseEncodedQueryParameters(CharStreams.toString(request.getReader())); - String q = StringUtils.defaultString(params.get("update")); - String resultType = StringUtils.defaultString(params.get("output")); - return update(q, resultType, request); - } catch (IOException e) { - return Response.serverError().entity(WebServiceUtil.jsonErrorResponse(e)).build(); - } + try { + Map<String, String> params = parseEncodedQueryParameters(CharStreams.toString(request.getReader())); + String q = StringUtils.defaultString(params.get("update")); + String resultType = StringUtils.defaultString(params.get("output")); + return update(q, resultType, request); + } catch (IOException e) { + return Response.serverError().entity(WebServiceUtil.jsonErrorResponse(e)).build(); + } } /** * Actual update implementation * */ - private Response update(String update, String resultType, HttpServletRequest request) { - try { + private Response update(String update, String resultType, HttpServletRequest request) { + try { if (StringUtils.isNotBlank(update)) { sparqlService.update(QueryLanguage.SPARQL, update); return Response.ok().build(); @@ -411,7 +413,7 @@ public class SparqlWebService { } catch (URISyntaxException e) { return Response.serverError().entity(WebServiceUtil.jsonErrorResponse(e)).build(); } - } + } /** * Get right update query from both possible parameters, for keeping @@ -439,25 +441,25 @@ public class SparqlWebService { * @return parameters */ private Map<String,String> parseEncodedQueryParameters(String body) { - Map<String,String> params = new HashMap<String,String>(); + Map<String,String> params = new HashMap<String,String>(); for (String pair : body.split("&")) { int eq = pair.indexOf("="); try { - if (eq < 0) { - // key with no value - params.put(URLDecoder.decode(pair, "UTF-8"), ""); - } else { - // key=value - String key = URLDecoder.decode(pair.substring(0, eq), "UTF-8"); - String value = URLDecoder.decode(pair.substring(eq + 1), "UTF-8"); - params.put(key, value); - } + if (eq < 0) { + // key with no value + params.put(URLDecoder.decode(pair, "UTF-8"), ""); + } else { + // key=value + String key = URLDecoder.decode(pair.substring(0, eq), "UTF-8"); + String value = URLDecoder.decode(pair.substring(eq + 1), "UTF-8"); + params.put(key, value); + } } catch (UnsupportedEncodingException e) { - log.error("Query parameter cannot be decoded: {}", e.getMessage(), e); + log.error("Query parameter cannot be decoded: {}", e.getMessage(), e); } } - return params; - } + return params; + } private Response createServiceDescriptionResponse(final HttpServletRequest request, final boolean isUpdate) { final List<ContentType> acceptedTypes; @@ -502,7 +504,7 @@ public class SparqlWebService { return Response.ok(entity, new MediaType(returnType.getType(), returnType.getSubtype(), returnType.getCharset().name())).build(); } - private Response buildQueryResponse(final ContentType format, final String query, final QueryType queryType) throws Exception { + private Response buildQueryResponse(final ContentType format, final String query, final QueryType queryType) throws Exception { StreamingOutput entity = new StreamingOutput() { @Override public void write(OutputStream output) throws IOException, WebApplicationException { @@ -524,7 +526,7 @@ public class SparqlWebService { responseBuilder.header("Content-Disposition", String.format("attachment; filename=\"%s.%s\"", queryType.toString().toLowerCase(), fmt.getDefaultFileExtension())); } return responseBuilder.build(); - } + } private static Pattern subTypePattern = Pattern.compile("[a-z]+/([a-z0-9-._]+\\+)?([a-z0-9-._]+)(;.*)?"); private String parseSubType(String mimeType) { @@ -534,4 +536,5 @@ public class SparqlWebService { else return mimeType; } + }
