Provide for arbitrary servlets to be added to the server. Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/be052f42 Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/be052f42 Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/be052f42
Branch: refs/heads/master Commit: be052f4298f0fd8cb69ce2b0e7782a340a29d8c6 Parents: 026d503 Author: Andy Seaborne <[email protected]> Authored: Mon May 29 16:50:57 2017 +0100 Committer: Andy Seaborne <[email protected]> Committed: Mon May 29 16:50:57 2017 +0100 ---------------------------------------------------------------------- .../fuseki/embedded/FusekiEmbeddedServer.java | 40 +++++++++++--------- 1 file changed, 23 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/be052f42/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java ---------------------------------------------------------------------- diff --git a/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java b/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java index e91b508..5ff5c74 100644 --- a/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java +++ b/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java @@ -18,6 +18,7 @@ package org.apache.jena.fuseki.embedded; +import java.util.ArrayList; import java.util.HashMap ; import java.util.List ; import java.util.Map ; @@ -25,6 +26,7 @@ import java.util.Map ; import javax.servlet.ServletContext ; import javax.servlet.http.HttpServlet; +import org.apache.jena.atlas.lib.Pair; import org.apache.jena.fuseki.Fuseki ; import org.apache.jena.fuseki.FusekiConfigException ; import org.apache.jena.fuseki.FusekiException ; @@ -36,10 +38,6 @@ import org.apache.jena.fuseki.server.DataAccessPoint ; import org.apache.jena.fuseki.server.DataAccessPointRegistry ; import org.apache.jena.fuseki.server.DataService ; import org.apache.jena.fuseki.servlets.FusekiFilter ; -import org.apache.jena.fuseki.validation.DataValidator; -import org.apache.jena.fuseki.validation.IRIValidator; -import org.apache.jena.fuseki.validation.QueryValidator; -import org.apache.jena.fuseki.validation.UpdateValidator; import org.apache.jena.query.Dataset ; import org.apache.jena.riot.WebContent; import org.apache.jena.sparql.core.DatasetGraph ; @@ -171,6 +169,8 @@ public class FusekiEmbeddedServer { private int port = 3330 ; private boolean loopback = false ; private boolean withStats = false ; + // Other servlets to add. + private List<Pair<String, HttpServlet>> other = new ArrayList<>(); private String contextPath = "/" ; private String staticContentDir = null ; private SecurityHandler securityHandler = null ; @@ -272,6 +272,16 @@ public class FusekiEmbeddedServer { return this ; } + /** + * Add the given servlet with the pathSpec. These are added so that they are + * checked after the Fuseki filter for datasets and before the static content + * handler (which is the last servlet) used for {@link #setStaticFileBase(String)}. + */ + public Builder addServlet(String pathSpec, HttpServlet servlet) { + other.add(Pair.create(pathSpec, servlet)); + return this; + } + /** Build a server according to the current description */ public FusekiEmbeddedServer build() { DataAccessPointRegistry registry = new DataAccessPointRegistry() ; @@ -280,8 +290,10 @@ public class FusekiEmbeddedServer { registry.put(name, dap) ; }) ; ServletContextHandler handler = buildServletContext(contextPath, registry) ; - if ( withStats ) - handler.addServlet(ActionStats.class, "/$/stats") ; + + setMimeTypes(handler); + servlets(handler); + DataAccessPointRegistry.set(handler.getServletContext(), registry) ; Server server = jettyServer(port, loopback) ; server.setHandler(handler); @@ -301,9 +313,6 @@ public class FusekiEmbeddedServer { if ( securityHandler != null ) context.setSecurityHandler(securityHandler); - setMimeTypes(context); - servlets(context); - return context ; } @@ -342,14 +351,11 @@ public class FusekiEmbeddedServer { FilterHolder h = new FilterHolder(ff) ; context.addFilter(h, "/*", null) ; - // Validators - if ( true ) { - addServlet(context, "/validate/query", new QueryValidator()); - addServlet(context, "/validate/update", new UpdateValidator()); - addServlet(context, "/validate/iri", new IRIValidator()); - addServlet(context, "/validate/data", new DataValidator()); - } - + other.forEach(p->addServlet(context, p.getLeft(), p.getRight())); + + if ( withStats ) + addServlet(context, "/$/stats", new ActionStats()) ; + if ( staticContentDir != null ) { DefaultServlet staticServlet = new DefaultServlet() ; ServletHolder staticContent = new ServletHolder(staticServlet) ;
