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) 
;

Reply via email to