You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2012/08/07 21:36:42 UTC

svn commit: r1370465 - in /jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki: ./ conneg/ server/ servlets/

Author: andy
Date: Tue Aug  7 19:36:41 2012
New Revision: 1370465

URL: http://svn.apache.org/viewvc?rev=1370465&view=rev
Log:
Extensive clean up of the code base
Implement (but not enable until more testing done) 
 + direct naming for GSP
 + queryString operations directly on the dataset URL itself
 + get on datset -> quads.

Added:
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Dataset.java
Modified:
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiLib.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/HttpNames.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/conneg/ConNeg.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_QueryDataset.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_QueryGeneral.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_R.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_ServletBase.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java Tue Aug  7 19:36:41 2012
@@ -39,7 +39,7 @@ public class DEF
     public static final MediaType acceptRSXML         = MediaType.create(WebContent.contentTypeResultsXML) ;
 
     public static final AcceptList rdfOffer           = AcceptList.create(acceptRDFXML, acceptTurtle1, acceptTurtle2, acceptTurtle3, acceptNTriples, acceptNTriplesAlt) ;
-    public static final AcceptList quadsOffer         = AcceptList.create(acceptTriG, acceptTriGAlt, acceptNQuads, acceptNQuadsAlt) ;
+    public static final AcceptList quadsOffer         = AcceptList.create(acceptNQuads, acceptNQuadsAlt, acceptTriG, acceptTriGAlt) ;
     public static final AcceptList charsetOffer       = AcceptList.create(charsetUTF8) ;
     
     public static final AcceptList rsOffer            = AcceptList.create(WebContent.contentTypeResultsXML, 

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiLib.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiLib.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiLib.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/FusekiLib.java Tue Aug  7 19:36:41 2012
@@ -58,6 +58,13 @@ public class FusekiLib
         mapContentTypeToLang.put(WebContent.contentTypeTurtleAlt2, Lang.TURTLE) ;
         mapContentTypeToLang.put(WebContent.contentTypeNTriples, Lang.NTRIPLES) ;   // text/plain
         mapContentTypeToLang.put(WebContent.contentTypeNTriplesAlt, Lang.NTRIPLES) ;
+        
+        
+        mapContentTypeToLang.put(WebContent.contentTypeTriG, Lang.TRIG) ;
+        mapContentTypeToLang.put(WebContent.contentTypeTriGAlt, Lang.TRIG) ;
+        mapContentTypeToLang.put(WebContent.contentTypeNQuads, Lang.NQUADS) ;
+        mapContentTypeToLang.put(WebContent.contentTypeNQuadsAlt, Lang.NQUADS) ;
+
     }
     // ---- 
 

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/HttpNames.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/HttpNames.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/HttpNames.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/HttpNames.java Tue Aug  7 19:36:41 2012
@@ -61,8 +61,7 @@ public class HttpNames
     public static final String paramTimeout         = "timeout" ;
     
     public static final String paramUpdate          = "update" ;
-    public static final String paramRequest         = "request" ;       // Alternative name. 
-    
+    public static final String paramRequest         = "request" ; 
     
     public static final String METHOD_DELETE        = "DELETE";
     public static final String METHOD_HEAD          = "HEAD";
@@ -81,7 +80,6 @@ public class HttpNames
     public static final String ServiceQueryAlt  = "sparql" ;
     public static final String ServiceUpdate    = "update" ;
     public static final String ServiceData      = "data" ;
-    public static final String ServiceData1     = "" ;
     public static final String ServiceUpload    = "upload" ;
     
     // Posisble values of fields.

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/conneg/ConNeg.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/conneg/ConNeg.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/conneg/ConNeg.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/conneg/ConNeg.java Tue Aug  7 19:36:41 2012
@@ -20,7 +20,6 @@ package org.apache.jena.fuseki.conneg;
 
 import static org.apache.jena.fuseki.HttpNames.hAcceptCharset ;
 
-
 import javax.servlet.http.HttpServletRequest ;
 
 import org.openjena.atlas.web.AcceptList ;

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/server/FusekiConfig.java Tue Aug  7 19:36:41 2012
@@ -97,13 +97,9 @@ public class FusekiConfig
             sDesc.updateEP.add(HttpNames.ServiceUpdate) ;
             sDesc.uploadEP.add(HttpNames.ServiceUpload) ;
             sDesc.readWriteGraphStoreEP.add(HttpNames.ServiceData) ;
-            sDesc.readWriteGraphStoreEP.add(HttpNames.ServiceData1) ;
         }
         else
-        {
             sDesc.readGraphStoreEP.add(HttpNames.ServiceData) ;
-            sDesc.readGraphStoreEP.add(HttpNames.ServiceData1) ;
-        }        
         ServerConfig config = new ServerConfig() ;
         config.services = Arrays.asList(sDesc) ;
         config.port = 3030 ;

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java Tue Aug  7 19:36:41 2012
@@ -22,10 +22,7 @@ import static java.lang.String.format ;
 import static org.apache.jena.fuseki.Fuseki.serverLog ;
 
 import java.io.FileInputStream ;
-import java.util.EnumSet ;
-import java.util.HashMap ;
-import java.util.List ;
-import java.util.Map ;
+import java.util.* ;
 
 import javax.servlet.http.HttpServlet ;
 
@@ -63,6 +60,8 @@ public class SPARQLServer
     
     private Server server = null ;
     private boolean verboseLogging = false ;
+    private static List<String> epDataset = Arrays.asList("*") ;
+    
     //private static int ThreadPoolSize = 100 ;
     
     public SPARQLServer(ServerConfig config)
@@ -160,7 +159,7 @@ public class SPARQLServer
         
         // Should all services be /_/.... or some such?
         
-        if ( installManager || installServices)
+        if ( installManager || installServices )
         {
             // TODO Respect port.
             if ( serverConfig.pagesPort != serverConfig.port )
@@ -225,17 +224,27 @@ public class SPARQLServer
         DatasetRegistry.get().put(datasetPath, sDesc) ;
         serverLog.info(format("Dataset path = %s", datasetPath)) ;
         
-        HttpServlet sparqlQuery = new SPARQL_QueryDataset(verboseLogging) ;
-        HttpServlet sparqlUpdate = new SPARQL_Update(verboseLogging) ;
-        HttpServlet sparqlUpload = new SPARQL_Upload(verboseLogging) ;
-        HttpServlet sparqlHttpR = new SPARQL_REST_R(verboseLogging) ;  
-        HttpServlet sparqlHttpRW = new SPARQL_REST_RW(verboseLogging) ;
-        
-        addServlet(context, datasetPath, sparqlQuery, sDesc.queryEP, enableCompression) ;
-        addServlet(context, datasetPath, sparqlUpdate, sDesc.updateEP, false) ; // No point - no results of any size.
-        addServlet(context, datasetPath, sparqlUpload, sDesc.uploadEP, false) ;
-        addServlet(context, datasetPath, sparqlHttpR, sDesc.readGraphStoreEP, enableCompression) ;
-        addServlet(context, datasetPath, sparqlHttpRW, sDesc.readWriteGraphStoreEP, enableCompression) ;
+        HttpServlet sparqlQuery     = new SPARQL_QueryDataset(verboseLogging) ;
+        HttpServlet sparqlUpdate    = new SPARQL_Update(verboseLogging) ;
+        HttpServlet sparqlUpload    = new SPARQL_Upload(verboseLogging) ;
+        HttpServlet sparqlHttpR     = new SPARQL_REST_R(verboseLogging) ;  
+        HttpServlet sparqlHttpRW    = new SPARQL_REST_RW(verboseLogging) ;
+        HttpServlet sparqlDataset   = new SPARQL_Dataset(verboseLogging) ;
+        
+        addServlet(context, datasetPath, sparqlQuery,   sDesc.queryEP,    enableCompression) ;
+        addServlet(context, datasetPath, sparqlUpdate,  sDesc.updateEP,   false) ;
+        addServlet(context, datasetPath, sparqlUpload,  sDesc.uploadEP,   false) ; // No point - no results of any size.
+        addServlet(context, datasetPath, sparqlHttpR,   sDesc.readGraphStoreEP,       enableCompression) ;
+        addServlet(context, datasetPath, sparqlHttpRW,  sDesc.readWriteGraphStoreEP,  enableCompression) ;
+        
+        // This is the servlet that:
+        //   1/ handles Graph Store Protocol direct naming.
+        //   2/ Handles dataset?operation.
+        //   3/ Handles GET dataset
+        // The servlet naming rules and priorities are a bit obscure - this takes priority over the above!
+        // ??No compression support because it is right sometimes and not others.
+        
+        //addServlet(context, datasetPath, sparqlDataset, epDataset, enableCompression) ;
     }
     
     private static Server configServer(String jettyConfig)

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/HttpAction.java Tue Aug  7 19:36:41 2012
@@ -22,8 +22,11 @@ package org.apache.jena.fuseki.servlets;
 import javax.servlet.http.HttpServletRequest ;
 import javax.servlet.http.HttpServletResponse ;
 
+import org.apache.jena.fuseki.DEF ;
+import org.apache.jena.fuseki.conneg.ConNeg ;
 import org.apache.jena.fuseki.server.DatasetRef ;
 import org.openjena.atlas.logging.Log ;
+import org.openjena.atlas.web.MediaType ;
 
 import com.hp.hpl.jena.query.ReadWrite ;
 import com.hp.hpl.jena.shared.Lock ;
@@ -161,4 +164,22 @@ public class HttpAction
     {
         SystemARQ.sync(dsg) ;
     }
+    
+    public static MediaType contentNegotationRDF(HttpAction action)
+    {
+        MediaType mt = ConNeg.chooseContentType(action.request, DEF.rdfOffer, DEF.acceptRDFXML) ;
+        if ( mt == null )
+            return null ;
+        if ( mt.getContentType() != null )
+            action.response.setContentType(mt.getContentType());
+        if ( mt.getCharset() != null )
+        action.response.setCharacterEncoding(mt.getCharset()) ;
+        return mt ;
+    }
+    
+    public static MediaType contentNegotationQuads(HttpAction action)
+    {
+        return ConNeg.chooseContentType(action.request, DEF.quadsOffer, DEF.acceptNQuads) ;
+    }
+
 }

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java Tue Aug  7 19:36:41 2012
@@ -23,6 +23,7 @@ import static java.lang.String.format ;
 import java.io.IOException ;
 
 import javax.servlet.ServletOutputStream ;
+import javax.servlet.http.HttpServletRequest ;
 
 import org.apache.jena.fuseki.FusekiLib ;
 import org.apache.jena.fuseki.HttpNames ;
@@ -35,29 +36,31 @@ import com.hp.hpl.jena.sparql.core.Datas
 
 /** 
  * Servlet that serves up quads for a dataset.
- * Combine with something for RDF GET on graphs?
  */
 
 public class REST_Quads extends SPARQL_REST
 {
-    // This is nearly SPARQL_REST_R
+    public REST_Quads(boolean verbose)
+    { super(verbose) ; }
     
-    // Have a "serve quads", "serve triples" library.
-    // ResponseQuads, ResponseTriples 
+    @Override
+    protected void validate(HttpServletRequest request)
+    {
+        // already checked?
+    }
     
     @Override
     protected void doGet(HttpActionREST action)
     {
-        if ( action.hasTarget() )
-            errorBadRequest("Attempt to use GET for quads and name a graph") ;
- 
-        MediaType mediaType = contentNegotationQuads(action) ;
+        MediaType mediaType = HttpAction.contentNegotationQuads(action) ;
         ServletOutputStream output ;
         try { output = action.response.getOutputStream() ; }
         catch (IOException ex) { errorOccurred(ex) ; output = null ; }
         
         TypedOutputStream out = new TypedOutputStream(output, mediaType) ;
         Lang lang = FusekiLib.langFromContentType(mediaType.getContentType()) ;
+        if ( lang == null )
+            lang = Lang.TRIG ;
 
         if ( action.verbose )
             log.info(format("[%d]   Get: Content-Type=%s, Charset=%s => %s", 
@@ -90,12 +93,9 @@ public class REST_Quads extends SPARQL_R
     @Override
     protected void doHead(HttpActionREST action)
     {
-        if ( action.hasTarget() )
-            errorBadRequest("Attempt to use GET for quads and name a graph") ;
-        
         action.beginRead() ;
         try { 
-            MediaType mediaType = contentNegotationQuads(action) ;
+            MediaType mediaType = HttpAction.contentNegotationQuads(action) ;
             success(action) ;
         } finally { action.endRead() ; }
     }

Added: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Dataset.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Dataset.java?rev=1370465&view=auto
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Dataset.java (added)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Dataset.java Tue Aug  7 19:36:41 2012
@@ -0,0 +1,238 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.fuseki.servlets;
+
+import java.util.Iterator ;
+import java.util.List ;
+
+import javax.servlet.http.HttpServletRequest ;
+import javax.servlet.http.HttpServletResponse ;
+
+import org.apache.jena.fuseki.DEF ;
+import org.apache.jena.fuseki.HttpNames ;
+import org.apache.jena.fuseki.conneg.ConNeg ;
+import org.apache.jena.fuseki.http.HttpSC ;
+import org.apache.jena.fuseki.server.DatasetRef ;
+import org.apache.jena.fuseki.server.DatasetRegistry ;
+import org.apache.jena.fuseki.servlets.SPARQL_REST.HttpActionREST ;
+import org.openjena.atlas.iterator.Filter ;
+import org.openjena.atlas.iterator.Iter ;
+import org.openjena.atlas.web.MediaType ;
+
+/** This servlet can be attached to a dataset location
+ *  and acts as a router for all SPARQL operations
+ *  (query, update, graph store, both direct and indirect naming). 
+ */
+public class SPARQL_Dataset extends SPARQL_ServletBase
+{
+    // To test: enable in SPARQLServer.configureOneDataset
+
+    // Restructure: 
+    //    Remove PlainRequestFlag - just use the query string override.
+    //    doCommonWorker without perform.
+    // pull 
+    // or allow validate(HttpServletRequest) override.
+    
+    public SPARQL_Dataset(boolean verbose_debug)
+    {
+        // Split SPARQL_ServletBase or move doCommon stub to ServletBase
+        super(verbose_debug) ;
+    }
+
+    protected String findDataset(final String uri) 
+    {
+        // Find the dataset.
+        Iterator<String> datasets = DatasetRegistry.get().keys() ;
+        Filter<String> matchDS = new Filter<String>()
+            {
+                @Override
+                public boolean accept(String datasetname)
+                {
+                    return uri.startsWith(datasetname) ;
+                }
+            } ;
+        
+        
+        String ds = Iter.first(datasets, matchDS) ;
+        return ds ;
+    }
+
+    private SPARQL_ServletBase queryServlet    = new SPARQL_QueryDataset(verbose_debug) ;
+    private SPARQL_ServletBase updateServlet   = new SPARQL_Update(verbose_debug) ;
+    // No upload support on the dataset itself - use service (or REST!) 
+    //private SPARQL_ServletBase uploadServlet   = new SPARQL_Upload(verbose_debug) ;
+    private SPARQL_ServletBase restServlet_RW  = new SPARQL_REST_RW(verbose_debug) ;
+    private SPARQL_ServletBase restServlet_R   = new SPARQL_REST_R(verbose_debug) ;
+    private SPARQL_ServletBase restQuads       = new REST_Quads(verbose_debug) ;
+    
+    @Override
+    protected void validate(HttpServletRequest request)
+    {
+        // already checked in SPARQ_Dataset?
+    }
+
+    @Override
+    protected void doCommonWorker(long id, HttpServletRequest request, HttpServletResponse response)
+    {
+        String uri = request.getRequestURI() ;
+        String method = request.getMethod() ;
+        String dsname = findDataset(uri) ;
+        String trailing = uri.substring(dsname.length()) ;
+        String qs = request.getQueryString() ;
+        
+        DatasetRef desc = DatasetRegistry.get().get(dsname) ;
+        
+        //log.info(format("[%d] All: %S %s :: %s ? %s", id, method, dsname, trailing, qs==null?"":qs)) ;
+        
+        if ( trailing.length() != 0 )
+        {
+            // Is it a registered service?
+            if ( checkDispatch(desc.queryEP, trailing, queryServlet, desc, id, request, response) ) return ; 
+            if ( checkDispatch(desc.updateEP, trailing, updateServlet, desc, id, request, response) ) return ; 
+            if ( checkDispatch(desc.uploadEP, trailing, restServlet_RW, desc, id, request, response) ) return ; 
+            if ( checkDispatch(desc.readGraphStoreEP, trailing, restServlet_R, desc, id, request, response) ) return ; 
+            if ( checkDispatch(desc.readWriteGraphStoreEP, trailing, restServlet_RW, desc, id, request, response) ) return ; 
+        }
+        
+        // if no query string => direct naming or REST on the dataset itself.
+        if ( qs == null )
+        {
+            if ( trailing.length() != 0 )
+            {
+                // Direct naming    
+                String absURI = request.getRequestURL().toString() ;
+                HttpActionREST a = new HttpActionREST(id, desc, absURI, request, response, verbose_debug) ;
+                // Conneg.
+                // Check access.
+                new SPARQL_REST_RW(verbose_debug).dispatch(a) ;
+            }
+            else
+            {
+                restQuads.doCommonWorker(id, request, response) ;
+                return ;
+            }
+        }
+        
+        if ( trailing.length() != 0 )
+        {
+            errorBadRequest("Can't invoke a query-string service on a direct named graph") ;
+            return ;
+        }
+        
+        datasetQueryString(id, desc, request, response) ;
+    }
+    
+    
+    // It's an ?operation on the dataset 
+    private void datasetQueryString(long id, DatasetRef desc, HttpServletRequest request, HttpServletResponse response)
+    {
+        String method = request.getMethod() ;
+        // Query string.
+        boolean hasParamQuery    = request.getParameter(HttpNames.paramQuery) != null ;
+        boolean hasParamRequest  = request.getParameter(HttpNames.paramRequest) != null ;
+        boolean hasParamGraph    = request.getParameter(HttpNames.paramGraph) != null ;
+
+        int c = 0 ;
+        if ( hasParamQuery ) c++ ;
+        if ( hasParamRequest ) c++ ;
+        if ( hasParamGraph ) c++ ;
+        if ( c > 1 )
+            errorBadRequest("Multiple possible actions") ;
+        if ( c == 0 )
+            errorBadRequest("Query string does not contain a speific action") ;
+
+        // Check an endpoint is registered.
+        if ( hasParamQuery )
+        {
+            if ( desc.queryEP.size() > 0 )
+                queryServlet.doCommonWorker(id, request, response) ;
+            else
+                errorMethodNotAllowed(method) ;
+        }
+
+        if ( hasParamRequest )
+        {
+            if ( desc.updateEP.size() > 0 )
+                updateServlet.doCommonWorker(id, request, response) ;
+            else
+                errorMethodNotAllowed(method) ;
+        }
+
+        if ( hasParamGraph )
+        {
+            if ( desc.readWriteGraphStoreEP.size() > 0 )
+                restServlet_RW.doCommonWorker(id, request, response) ;
+            else if ( desc.readGraphStoreEP.size() > 0 )
+                restServlet_R.doCommonWorker(id, request, response) ;
+            else
+                errorMethodNotAllowed(method) ;
+        }
+    }
+    
+    protected static MediaType contentNegotationQuads(HttpAction action)
+    {
+        MediaType mt = ConNeg.chooseContentType(action.request, DEF.quadsOffer, DEF.acceptNQuads) ;
+        if ( mt == null )
+            return null ;
+        if ( mt.getContentType() != null )
+            action.response.setContentType(mt.getContentType());
+        if ( mt.getCharset() != null )
+        action.response.setCharacterEncoding(mt.getCharset()) ;
+        return mt ;
+    }
+
+    private boolean checkDispatch(List<String> endpointNames, String srvName , SPARQL_ServletBase servlet , DatasetRef desc, long id, 
+                                  HttpServletRequest request, HttpServletResponse response)
+    {
+        if ( ! endpointNames.contains(srvName) )
+            return false ;
+        servlet.doCommonWorker(id, request, response) ;
+        return true ;
+    }
+
+
+    @Override
+    protected void perform(long id, DatasetRef desc, HttpServletRequest request, HttpServletResponse response)
+    {
+        // Dummy - restructure SPARQL_ServletBase?
+        error(HttpSC.INTERNAL_SERVER_ERROR_500, "Operation directed to general indirection servlet") ;
+    }
+
+    @Override
+    protected void doHead(HttpServletRequest request, HttpServletResponse response)
+    { doCommon(request, response) ; }
+    
+    @Override
+    protected void doGet(HttpServletRequest request, HttpServletResponse response)
+    { doCommon(request, response) ; }
+
+    @Override
+    protected void doOptions(HttpServletRequest request, HttpServletResponse response)
+    { doCommon(request, response) ; }
+    
+    @Override
+    protected void doPut(HttpServletRequest request, HttpServletResponse response)
+    { doCommon(request, response) ; }
+
+    @Override
+    protected void doDelete(HttpServletRequest request, HttpServletResponse response)
+    { doCommon(request, response) ; }
+
+}
+

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Protocol.java Tue Aug  7 19:36:41 2012
@@ -50,9 +50,9 @@ public  abstract class SPARQL_Protocol e
         }
     }
     
-    protected SPARQL_Protocol(PlainRequestFlag noQueryStringIsOK, boolean verbose_debug)
+    protected SPARQL_Protocol(boolean verbose_debug)
     {
-        super(noQueryStringIsOK, verbose_debug) ;
+        super(verbose_debug) ;
     }
 
     protected static String messageForQPE(QueryParseException ex)
@@ -63,12 +63,6 @@ public  abstract class SPARQL_Protocol e
             return Lib.classShortName(ex.getCause().getClass()) ;
         return null ;
     }
-
-    // These are the operations passed on by SPARQL_ServletBase
-//    protected abstract String mapRequestToDataset(String uri) ;
-//    protected abstract void perform(long id, DatasetGraph dsg, HttpServletRequest request, HttpServletResponse response) ;
-//    protected abstract boolean requestNoQueryString(HttpServletRequest request, HttpServletResponse response) ;
-
     
     protected static DatasetDescription getDatasetDescription(HttpActionQuery action)
     {

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java Tue Aug  7 19:36:41 2012
@@ -79,7 +79,7 @@ public abstract class SPARQL_Query exten
     }
     
     public SPARQL_Query(boolean verbose)
-    { super(PlainRequestFlag.DIFFERENT, verbose) ; }
+    { super(verbose) ; }
 
     
     public SPARQL_Query()
@@ -148,6 +148,7 @@ public abstract class SPARQL_Query exten
                                         paramTimeout } ;
     protected static Set<String> allParams = new HashSet<String>(Arrays.asList(params_)) ;
     /** Called to validate arguments */
+    @Override
     protected abstract void validate(HttpServletRequest request) ;
     
     /** Helper for validating request */

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_QueryDataset.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_QueryDataset.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_QueryDataset.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_QueryDataset.java Tue Aug  7 19:36:41 2012
@@ -19,7 +19,6 @@
 package org.apache.jena.fuseki.servlets;
 
 import javax.servlet.http.HttpServletRequest ;
-import javax.servlet.http.HttpServletResponse ;
 
 import org.apache.jena.fuseki.HttpNames ;
 
@@ -38,6 +37,17 @@ public class SPARQL_QueryDataset extends
     @Override
     protected void validate(HttpServletRequest request)
     {
+        String method = request.getMethod().toUpperCase() ;
+        
+        if ( ! HttpNames.METHOD_POST.equals(method) && ! HttpNames.METHOD_GET.equals(method) )
+            errorMethodNotAllowed("Not a GET or POST request") ;
+        
+        if ( HttpNames.METHOD_GET.equals(method) && request.getQueryString() == null )
+        {
+            warning("Service Description / SPARQL Query / "+request.getRequestURI()) ;
+            errorNotFound("Service Description: "+request.getRequestURI()) ;
+        }
+        
         validate(request, allParams) ;
     }
 
@@ -50,20 +60,4 @@ public class SPARQL_QueryDataset extends
     { 
         return DatasetFactory.create(action.getActiveDSG()) ;
     }
-
-    @Override
-    protected boolean requestNoQueryString(HttpServletRequest request, HttpServletResponse response)
-    {
-        if ( HttpNames.METHOD_POST.equals(request.getMethod().toUpperCase()) )
-            return true ;
-        
-        if ( ! HttpNames.METHOD_GET.equals(request.getMethod().toUpperCase()) )
-        {
-            errorNotImplemented("Not a GET or POST request") ;
-            return false ;
-        }
-        warning("Service Description / SPARQL Query / "+request.getRequestURI()) ;
-        errorNotFound("Service Description: "+request.getRequestURI()) ;
-        return false ;
-    }
 }

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_QueryGeneral.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_QueryGeneral.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_QueryGeneral.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_QueryGeneral.java Tue Aug  7 19:36:41 2012
@@ -23,7 +23,6 @@ import static java.lang.String.format ;
 import java.util.List ;
 
 import javax.servlet.http.HttpServletRequest ;
-import javax.servlet.http.HttpServletResponse ;
 
 import org.apache.jena.fuseki.HttpNames ;
 import org.apache.jena.fuseki.migrate.GraphLoadUtils ;
@@ -52,13 +51,14 @@ public class SPARQL_QueryGeneral extends
     @Override
     protected void validate(HttpServletRequest request)
     {
+        if ( HttpNames.METHOD_GET.equals(request.getMethod().toUpperCase()) && request.getQueryString() == null )
+            errorBadRequest("No query string given") ;
         validate(request, allParams) ;
     }
 
     @Override
     protected void validateQuery(HttpActionQuery action, Query query)
     {
-        // One or the other,
     }
     
     @Override
@@ -78,15 +78,6 @@ public class SPARQL_QueryGeneral extends
 
         return datasetFromDescription(action, datasetDesc) ;
     }
-    
-    @Override
-    protected boolean requestNoQueryString(HttpServletRequest request, HttpServletResponse response)
-    {
-        if ( HttpNames.METHOD_POST.equals(request.getMethod().toUpperCase()) )
-            return true ;
-        errorBadRequest("No query string given") ;
-        return false ;
-    }
 
     /**
      * Construct a Dataset based on a dataset description.

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST.java Tue Aug  7 19:36:41 2012
@@ -38,14 +38,11 @@ import javax.servlet.ServletException ;
 import javax.servlet.http.HttpServletRequest ;
 import javax.servlet.http.HttpServletResponse ;
 
-import org.apache.jena.fuseki.DEF ;
 import org.apache.jena.fuseki.FusekiLib ;
 import org.apache.jena.fuseki.HttpNames ;
-import org.apache.jena.fuseki.conneg.ConNeg ;
 import org.apache.jena.fuseki.server.DatasetRef ;
 import org.openjena.atlas.lib.Sink ;
 import org.openjena.atlas.web.ContentType ;
-import org.openjena.atlas.web.MediaType ;
 import org.openjena.riot.* ;
 import org.openjena.riot.lang.LangRIOT ;
 import org.openjena.riot.lang.SinkTriplesToGraph ;
@@ -67,7 +64,16 @@ public abstract class SPARQL_REST extend
     
     protected static ErrorHandler errorHandler = ErrorHandlerFactory.errorHandlerStd(log) ;
 
-    protected class HttpActionREST extends HttpAction {
+    public static class HttpActionREST extends HttpAction {
+        
+        // Special ; direct.
+        HttpActionREST(long id, DatasetRef desc, String absUri, HttpServletRequest request, HttpServletResponse response, boolean verbose)
+        {
+            super(id, desc, request, response, verbose) ;
+            Node gn = Node.createURI(absUri) ;
+            _target = Target.createNamed(desc.dataset, absUri, gn) ; 
+        }
+        
         private Target _target = null ; 
         protected HttpActionREST(long id, DatasetRef desc, HttpServletRequest request, HttpServletResponse response, boolean verbose)
         {
@@ -165,7 +171,7 @@ public abstract class SPARQL_REST extend
     }
 
     public SPARQL_REST(boolean verbose)
-    { super(PlainRequestFlag.DIFFERENT, verbose) ; }
+    { super(verbose) ; }
 
     public SPARQL_REST()
     { this(false) ; }
@@ -191,7 +197,8 @@ public abstract class SPARQL_REST extend
         dispatch(action) ;
     }
 
-    private void dispatch(HttpActionREST action)
+    // Public for general dispatch
+    public void dispatch(HttpActionREST action)
     {
         HttpServletRequest req = action.request ;
         HttpServletResponse resp = action.response ;
@@ -229,49 +236,6 @@ public abstract class SPARQL_REST extend
     protected abstract void doPut(HttpActionREST action) ;
     protected abstract void doOptions(HttpActionREST action) ;
 
-    @Override
-    protected boolean requestNoQueryString(HttpServletRequest request, HttpServletResponse response)
-    {
-        errorBadRequest("No query string") ;
-        return false ;
-    }
-
-//    private TypedStream createTypedStream(MediaType contentType)
-//    {
-//        MediaType contentType = contentNegotationRDF(request) ;
-//        String charset = null ;
-//        
-//        if ( ! DEF.acceptRDFXML.equals(contentType) )
-//            charset = ConNeg.chooseCharset(request, DEF.charsetOffer, DEF.charsetUTF8).getType() ;
-//        
-//        String contentTypeStr = contentType.getMediaType() ;
-//        try {
-//            TypedStream ts = new TypedStream(request.getInputStream(),
-//                                             contentTypeStr,
-//                                             charset) ;
-//            return ts ;
-//        } catch (IOException ex) { errorOccurred(ex) ; return null ; }
-//    }
-
-    protected static MediaType contentNegotationRDF(HttpActionREST action)
-    {
-        MediaType mt = ConNeg.chooseContentType(action.request, DEF.rdfOffer, DEF.acceptRDFXML) ;
-        if ( mt == null )
-            return null ;
-        if ( mt.getContentType() != null )
-            action.response.setContentType(mt.getContentType());
-        if ( mt.getCharset() != null )
-        action.response.setCharacterEncoding(mt.getCharset()) ;
-        return mt ;
-    }
-    
-    protected static MediaType contentNegotationQuads(HttpActionREST action)
-    {
-        return ConNeg.chooseContentType(action.request, DEF.quadsOffer, DEF.acceptTriG) ;
-    }
-
-    // Auxilliary functionality.
-    
     protected static void deleteGraph(HttpActionREST action)
     {
         if ( action.getTarget().isDefault )
@@ -379,8 +343,12 @@ public abstract class SPARQL_REST extend
         return dsgTmp ;
     }
     
-    protected static void validate(HttpServletRequest request)
+    @Override
+    protected void validate(HttpServletRequest request)
     {
+        if ( request.getQueryString() == null )
+            errorBadRequest("No query string") ;
+        
         String g = request.getParameter(HttpNames.paramGraph) ;
         String d = request.getParameter(HttpNames.paramGraphDefault) ;
         

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_R.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_R.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_R.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_R.java Tue Aug  7 19:36:41 2012
@@ -48,7 +48,7 @@ public class SPARQL_REST_R extends SPARQ
     {
         // Assume success - do the set up before grabbing the lock.
         // Sets content type.
-        MediaType mediaType = contentNegotationRDF(action) ;
+        MediaType mediaType = HttpAction.contentNegotationRDF(action) ;
         
         ServletOutputStream output ;
         try { output = action.response.getOutputStream() ; }
@@ -95,7 +95,7 @@ public class SPARQL_REST_R extends SPARQ
                 successNotFound(action) ;
                 return ;
             }
-            MediaType mediaType = contentNegotationRDF(action) ;
+            MediaType mediaType = HttpAction.contentNegotationRDF(action) ;
             success(action) ;
         } finally { action.endRead() ; }
     }

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_ServletBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_ServletBase.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_ServletBase.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_ServletBase.java Tue Aug  7 19:36:41 2012
@@ -42,16 +42,16 @@ import com.hp.hpl.jena.tdb.migrate.Datas
 
 public abstract class SPARQL_ServletBase extends ServletBase
 {
-    private final PlainRequestFlag queryStringHandling ;
+//    private final PlainRequestFlag queryStringHandling ;
     private static DatasetGraph dummyDSG = new DatasetGraphReadOnly(DatasetGraphFactory.createMemFixed()) ;
     // Flag for whether a request (no query string) is handled as a regular operation or
     // routed to special handler.
-    protected enum PlainRequestFlag { REGULAR, DIFFERENT }
+//    protected enum PlainRequestFlag { REGULAR, DIFFERENT }
     
-    protected SPARQL_ServletBase(PlainRequestFlag noQueryStringIsOK, boolean verbose_debug)
+    protected SPARQL_ServletBase(boolean verbose_debug)
     {
         super(verbose_debug) ;
-        this.queryStringHandling = noQueryStringIsOK ;
+        //this.queryStringHandling = noQueryStringIsOK ;
     }
     
     // Common framework for handling HTTP requests
@@ -63,44 +63,17 @@ public abstract class SPARQL_ServletBase
         
         HttpServletResponseTracker responseTracked = new HttpServletResponseTracker(response) ;
         response = responseTracked ;
-        
-        String uri = request.getRequestURI() ;
         initResponse(request, response) ;
-        
-        DatasetRef desc = null ;
         Context cxt = ARQ.getContext() ;
-        
-        try {
-            if ( request.getQueryString() == null && queryStringHandling == PlainRequestFlag.DIFFERENT )
-            {
-                boolean requestContinue = requestNoQueryString(request, response) ;
-                if ( ! requestContinue ) 
-                    return ;
-            }
 
-            uri = mapRequestToDataset(uri) ;
-
-            if ( uri != null )
-            {
-                desc = DatasetRegistry.get().get(uri) ;
-                if ( desc == null )
-                {
-                    errorNotFound("No dataset for URI: "+uri) ;
-                    return ;
-                }
-                //cxt = desc.dataset.getContext() ;
-            }
-            else {
-                desc = new DatasetRef();
-                desc.dataset = dummyDSG;
-            }
-            perform(id, desc, request, response) ;
-            //serverlog.info(String.format("[%d] 200 Success", id)) ;
+        try {
+            validate(request) ;
+            doCommonWorker(id, request, response) ;
         } catch (QueryCancelledException ex)
         {
             // Also need the per query info ...
-        	String message = String.format("The query timed out (restricted to %s ms)", cxt.get(ARQ.queryTimeout));
-        	responseSendError(response, HttpSC.REQUEST_TIMEOUT_408, message);
+            String message = String.format("The query timed out (restricted to %s ms)", cxt.get(ARQ.queryTimeout));
+            responseSendError(response, HttpSC.REQUEST_TIMEOUT_408, message);
             // Log message done by printResponse in a moment.
         } catch (ActionErrorException ex)
         {
@@ -118,10 +91,38 @@ public abstract class SPARQL_ServletBase
             log.warn(format("[%d] RC = %d : %s", id, HttpSC.INTERNAL_SERVER_ERROR_500, ex.getMessage()), ex) ;
             responseSendError(response, HttpSC.INTERNAL_SERVER_ERROR_500, ex.getMessage()) ;
         }
-        
+
         printResponse(id, responseTracked) ;
     }
 
+    protected abstract void validate(HttpServletRequest request) ;
+    
+    protected void doCommonWorker(long id, HttpServletRequest request, HttpServletResponse response)
+    {
+        DatasetRef desc = null ;
+        String uri = request.getRequestURI() ;
+
+        validate(request) ;
+        
+        uri = mapRequestToDataset(uri) ;
+
+        if ( uri != null )
+        {
+            desc = DatasetRegistry.get().get(uri) ;
+            if ( desc == null )
+            {
+                errorNotFound("No dataset for URI: "+uri) ;
+                return ;
+            }
+            //cxt = desc.dataset.getContext() ;
+        }
+        else {
+            desc = new DatasetRef();
+            desc.dataset = dummyDSG;
+        }
+        perform(id, desc, request, response) ;
+    }
+
     @SuppressWarnings("unused") // ServletException
     protected void doPatch(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException
@@ -182,18 +183,6 @@ public abstract class SPARQL_ServletBase
             log.info(String.format("[%d] %d %s", id, response.statusCode, response.message)) ;
     }
     
-    private void responseSendError(HttpServletResponse response, int statusCode, String message)
-    {
-        try { response.sendError(statusCode, message) ; }
-        catch (IOException ex) { errorOccurred(ex) ; }
-    }
-    
-    private void responseSendError(HttpServletResponse response, int statusCode)
-    {
-        try { response.sendError(statusCode) ; }
-        catch (IOException ex) { errorOccurred(ex) ; }
-    }
-
     /** Map request to uri in the registry.
      *  null means no mapping done (passthrough). 
      */
@@ -220,11 +209,4 @@ public abstract class SPARQL_ServletBase
     }
 
     protected abstract void perform(long id, DatasetRef desc, HttpServletRequest request, HttpServletResponse response) ;
-
-    /** Request had no query string.
-     *  Either: (1) handle the request in this opeation - throw an error or send response
-     *  and return "false" (don't continue) 
-     *  Or: (2) return true for continue.
-     */
-    protected abstract boolean requestNoQueryString(HttpServletRequest request, HttpServletResponse response) ;
 }

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java Tue Aug  7 19:36:41 2012
@@ -59,7 +59,7 @@ public class SPARQL_Update extends SPARQ
     }
     
     public SPARQL_Update(boolean verbose)
-    { super(PlainRequestFlag.REGULAR, verbose) ; }
+    { super(verbose) ; }
 
     public SPARQL_Update()
     { this(false) ; }
@@ -86,15 +86,6 @@ public class SPARQL_Update extends SPARQ
     }
 
     @Override
-    protected boolean requestNoQueryString(HttpServletRequest request, HttpServletResponse response)
-    {
-        if ( HttpNames.METHOD_POST.equals(request.getMethod().toUpperCase()) )
-            return true ;
-        errorOccurred("Bad!") ;
-        return false ;
-    }
-
-    @Override
     protected void perform(long id, DatasetRef desc, HttpServletRequest request, HttpServletResponse response)
     {
         // validate -> action.
@@ -125,8 +116,12 @@ public class SPARQL_Update extends SPARQ
         error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415, "Bad content type: " + request.getContentType()) ;
     }
 
-    private void validate(HttpServletRequest request)
+    @Override
+    protected void validate(HttpServletRequest request)
     {
+        if ( ! HttpNames.METHOD_POST.equals(request.getMethod().toUpperCase()) )
+            errorMethodNotAllowed("SPARQL Update : use POST") ;
+        
         // WebContent needs to migrate to using ContentType.
         String ctStr ;
         {

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java Tue Aug  7 19:36:41 2012
@@ -61,7 +61,7 @@ public class SPARQL_Upload extends SPARQ
     
     public SPARQL_Upload(boolean verbose_debug)
     {
-        super(PlainRequestFlag.REGULAR, verbose_debug) ;
+        super(verbose_debug) ;
     }
 
     // Methods to respond to.
@@ -198,15 +198,8 @@ public class SPARQL_Upload extends SPARQ
             return ;
         }
     }
-
-    private void validate(HttpServletRequest request)
-    {}
-
+    
     @Override
-    protected boolean requestNoQueryString(HttpServletRequest request, HttpServletResponse response)
-    {
-        errorOccurred("requestNoQueryString") ;
-        return true ;
-    }
-
+    protected void validate(HttpServletRequest request)
+    {}
 }

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java?rev=1370465&r1=1370464&r2=1370465&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java (original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java Tue Aug  7 19:36:41 2012
@@ -43,13 +43,13 @@ public abstract class ServletBase extend
         this.verbose_debug = verbose_debug ;
     }
     
-    private void responseSendError(HttpServletResponse response, int statusCode, String message)
+    protected void responseSendError(HttpServletResponse response, int statusCode, String message)
     {
         try { response.sendError(statusCode, message) ; }
         catch (IOException ex) { errorOccurred(ex) ; }
     }
     
-    private void responseSendError(HttpServletResponse response, int statusCode)
+    protected void responseSendError(HttpServletResponse response, int statusCode)
     {
         try { response.sendError(statusCode) ; }
         catch (IOException ex) { errorOccurred(ex) ; }
@@ -116,7 +116,7 @@ public abstract class ServletBase extend
             out.flush() ;
         } catch (IOException ex) { errorOccurred(ex) ; }
     }
-
+    
     protected static void warning(String string)
     {
         log.warn(string) ;