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 2011/08/03 00:28:13 UTC

svn commit: r1153293 - in /incubator/jena/Jena2/Fuseki/trunk: src-dev/dev/ src/main/java/org/openjena/fuseki/ src/main/java/org/openjena/fuseki/migrate/ src/main/java/org/openjena/fuseki/server/ src/main/java/org/openjena/fuseki/servlets/

Author: andy
Date: Tue Aug  2 22:28:11 2011
New Revision: 1153293

URL: http://svn.apache.org/viewvc?rev=1153293&view=rev
Log:
General purpose SPARQL processor (not yet enabled)

Added:
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/migrate/SinkLimited.java   (with props)
Modified:
    incubator/jena/Jena2/Fuseki/trunk/src-dev/dev/DevFuseki.java
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/Fuseki.java
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/migrate/GraphLoadUtils.java
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/server/SPARQLServer.java
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/HttpAction.java
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Query.java
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_QueryDataset.java
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_QueryGeneral.java
    incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_ServletBase.java

Modified: incubator/jena/Jena2/Fuseki/trunk/src-dev/dev/DevFuseki.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src-dev/dev/DevFuseki.java?rev=1153293&r1=1153292&r2=1153293&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src-dev/dev/DevFuseki.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src-dev/dev/DevFuseki.java Tue Aug  2 22:28:11 2011
@@ -20,9 +20,10 @@ package dev;
 
 public class DevFuseki
 {
-    // LimitingGraph, LImitingBulkUpdateHandler --> chnage to use a limiting Sink<>
-    // Finish: SPARQL_QueryGeneral -- attach at? /sparql/proc?
-    // --jetty-config
+    // LimitingGraph, LimitingBulkUpdateHandler --> chnage to use a limiting Sink<>
+    // Finish: SPARQL_QueryGeneral
+    //    Parse errors and etc need to be passed out.
+    // --jetty-config documentation
     
     // Rework arguments.
     //   Explicit install pages.

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/Fuseki.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/Fuseki.java?rev=1153293&r1=1153292&r2=1153293&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/Fuseki.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/Fuseki.java Tue Aug  2 22:28:11 2011
@@ -27,6 +27,7 @@ import com.hp.hpl.jena.sparql.SystemARQ 
 import com.hp.hpl.jena.sparql.lib.Metadata ;
 import com.hp.hpl.jena.sparql.mgt.ARQMgt ;
 import com.hp.hpl.jena.sparql.mgt.SystemInfo ;
+import com.hp.hpl.jena.util.FileManager ;
 
 public class Fuseki
 {
@@ -48,18 +49,25 @@ public class Fuseki
         return m ;
     }
     
-    static public String NAME = "Fuseki" ;
-    static public String VERSION = metadata.get(PATH+".version", "development") ;
-    static public String BUILD_DATE = metadata.get(PATH+".build.datetime", "unknown") ; // call Date if unavailable.
-    public static String serverHttpName     = NAME+" ("+VERSION+")" ;    
+    static public final String NAME = "Fuseki" ;
+    static public final String VERSION = metadata.get(PATH+".version", "development") ;
+    static public final String BUILD_DATE = metadata.get(PATH+".build.datetime", "unknown") ; // call Date if unavailable.
+    static public final String serverHttpName     = NAME+" ("+VERSION+")" ;    
     
     // Log for operations
-    public static String requestLogName = PATH+".Fuseki" ;
-    public static Logger requestLog = LoggerFactory.getLogger(PATH+".Fuseki") ;
-    public static String serverLogName = PATH+".Server" ;
-    public static Logger serverLog = LoggerFactory.getLogger(PATH+".Server") ;
+    public static final String requestLogName = PATH+".Fuseki" ;
+    public static final Logger requestLog = LoggerFactory.getLogger(PATH+".Fuseki") ;
+    public static final String serverLogName = PATH+".Server" ;
+    public static final Logger serverLog = LoggerFactory.getLogger(PATH+".Server") ;
     // Log for general server messages.
     
+    public static final FileManager webFileManager ;
+    static {
+        webFileManager = new FileManager() ;
+        // Only know how to handle http URLs 
+        webFileManager.addLocatorURL() ;
+    }
+    
     private static boolean initialized = false ;
     public static void init()
     {

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/migrate/GraphLoadUtils.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/migrate/GraphLoadUtils.java?rev=1153293&r1=1153292&r2=1153293&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/migrate/GraphLoadUtils.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/migrate/GraphLoadUtils.java Tue Aug  2 22:28:11 2011
@@ -19,18 +19,25 @@
 
 package org.openjena.fuseki.migrate;
 
-import java.io.InputStream;
+import java.io.InputStream ;
 
-import com.hp.hpl.jena.graph.Factory;
-import com.hp.hpl.jena.graph.Graph;
-import com.hp.hpl.jena.shared.NotFoundException;
-
-import com.hp.hpl.jena.rdf.model.Model;
-import com.hp.hpl.jena.rdf.model.ModelFactory;
-import com.hp.hpl.jena.rdf.model.RDFReader;
-
-import com.hp.hpl.jena.util.FileManager;
-import com.hp.hpl.jena.util.FileUtils;
+import org.openjena.atlas.lib.Sink ;
+import org.openjena.fuseki.Fuseki ;
+import org.openjena.riot.Lang ;
+import org.openjena.riot.RiotException ;
+import org.openjena.riot.RiotReader ;
+import org.openjena.riot.lang.LangRIOT ;
+import org.openjena.riot.lang.SinkTriplesToGraph ;
+
+import com.hp.hpl.jena.graph.Factory ;
+import com.hp.hpl.jena.graph.Graph ;
+import com.hp.hpl.jena.graph.Triple ;
+import com.hp.hpl.jena.rdf.model.Model ;
+import com.hp.hpl.jena.rdf.model.ModelFactory ;
+import com.hp.hpl.jena.rdf.model.RDFReader ;
+import com.hp.hpl.jena.shared.NotFoundException ;
+import com.hp.hpl.jena.util.FileManager ;
+import com.hp.hpl.jena.util.FileUtils ;
 
 /** A packaging of code to do a controlled read of a graph or model */
 
@@ -40,52 +47,50 @@ public class GraphLoadUtils
     
     public static Model readModel(String uri, int limit)
     {
-        return readModel(uri, limit, FileUtils.guessLang(uri)) ;
-    }
-
-    public static Model readModel(String uri, int limit, String syntax) 
-    {
         Graph g = Factory.createGraphMem() ;
-        return readUtil(g, uri, limit, syntax) ;
+        readUtil(g, uri, limit) ;
+        return ModelFactory.createModelForGraph(g) ;
     }
     
     public static void loadModel(Model model, String uri, int limit) 
     {
-        loadModel(model, uri, limit, null) ;
-    }
-
-    public static void loadModel(Model model, String uri, int limit, String syntax) 
-    {
         Graph g = model.getGraph() ;
-        readUtil(g, uri, limit, syntax) ;
+        readUtil(g, uri, limit) ;
     }
 
     // ---- Graph level
     
     public static Graph readGraph(String uri, int limit)
     {
-        return readGraph(uri, limit, FileUtils.guessLang(uri)) ;
-    }
-    
-    public static Graph readGraph(String uri, int limit, String syntax) 
-    {
         Graph g = Factory.createGraphMem() ;
-        Model m = readUtil(g, uri, limit, syntax) ;
-        return m.getGraph() ;
+        readUtil(g, uri, limit) ;
+        return g ;
     }
     
     public static void loadGraph(Graph g, String uri, int limit) 
     {
-        loadGraph(g, uri, limit, FileUtils.guessLang(uri)) ;
+        readUtil(g, uri, limit) ;
     }
-
-    public static void loadGraph(Graph g, String uri, int limit, String syntax) 
+    
+    // ** Worker.
+    private static void readUtil(Graph graph, String uri, int limit)
     {
-        Model m = readUtil(g, uri, limit, syntax) ;
+        Lang lang = Lang.guess(uri) ;
+        
+        Sink<Triple> sink = new SinkTriplesToGraph(graph) ;
+        sink = new SinkLimited<Triple>(sink, limit) ;
+        
+        // TODO Conneg
+        // WebReader.
+        InputStream input = Fuseki.webFileManager.open(uri) ;
+        
+        LangRIOT parser = RiotReader.createParserTriples(input, lang, uri, sink) ;
+        try {
+            parser.parse() ;
+        } catch (RiotException ex) { throw ex ; }
     }
     
-    
-    private static Model readUtil(Graph graph, String uri, int limit, String syntax) 
+    private static Model readUtil1(Graph graph, String uri, int limit, String syntax) 
     {
         // Use the mapped uri as the syntax hint.
         {

Added: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/migrate/SinkLimited.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/migrate/SinkLimited.java?rev=1153293&view=auto
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/migrate/SinkLimited.java (added)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/migrate/SinkLimited.java Tue Aug  2 22:28:11 2011
@@ -0,0 +1,47 @@
+/**
+ * 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.openjena.fuseki.migrate;
+
+import org.openjena.atlas.lib.Sink ;
+import org.openjena.atlas.lib.SinkWrapper ;
+import org.openjena.riot.RiotException ;
+
+public class SinkLimited<T> extends SinkWrapper<T>
+{
+   private long count = 0 ;
+private long limit ;
+    
+    public SinkLimited(Sink<T> output, long limit)
+    {
+        super(output) ;
+        this.limit = limit ;
+    }
+
+    @Override
+    public void send(T thing)
+    {
+        count++ ;
+        if ( count > limit )
+            throw new RiotException("Limit "+limit+" exceeded") ; 
+        super.send(thing) ;
+    }
+    
+    public long getCount() { return count ; } 
+}
+

Propchange: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/migrate/SinkLimited.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/server/SPARQLServer.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/server/SPARQLServer.java?rev=1153293&r1=1153292&r2=1153293&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/server/SPARQLServer.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/server/SPARQLServer.java Tue Aug  2 22:28:11 2011
@@ -206,7 +206,7 @@ public class SPARQLServer
             addServlet(context, validateIRI, validationRoot+"/iri") ;
             addServlet(context, dumpService, "/dump") ;
             // general query processor.
-            //addServlet(context, generalQueryService, sparqlProcessor) ;
+            addServlet(context, generalQueryService, sparqlProcessor) ;
         }
 
         if ( installManager )

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/HttpAction.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/HttpAction.java?rev=1153293&r1=1153292&r2=1153293&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/HttpAction.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/HttpAction.java Tue Aug  2 22:28:11 2011
@@ -58,7 +58,7 @@ class HttpAction
     {
         this.id = id ;
         this.dsg = dsg ;
-        this.lock = dsg.getLock() ;
+        this.lock = ( dsg != null ) ? dsg.getLock() : null ;
         this.request = request ;
         this.response = response ;
         this.verbose = verbose ;
@@ -91,6 +91,8 @@ class HttpAction
 
     private void enter(DatasetGraph dsg, Lock lock, boolean readLock)
     {
+        if ( lock == null && dsg == null )
+            return ;
         if ( lock == null )
             lock = dsg.getLock() ;
         if ( lock == null )
@@ -100,6 +102,9 @@ class HttpAction
     
     private void leave(DatasetGraph dsg, Lock lock, boolean readLock)
     {
+        if ( lock == null && dsg == null )
+            return ;
+
         if ( lock == null )
             lock = dsg.getLock() ;
         if ( lock == null )
@@ -110,6 +115,5 @@ class HttpAction
     public void sync()
     {
         SystemARQ.sync(dsg) ;
-        //TDB.sync(dsg) ;
     }
 }

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Query.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Query.java?rev=1153293&r1=1153292&r2=1153293&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Query.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_Query.java Tue Aug  2 22:28:11 2011
@@ -114,22 +114,6 @@ public abstract class SPARQL_Query exten
         error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415, "Bad content type: "+incoming) ;
     }
 
-    // (1) Param to constructor.
-    // (2) DRY : to super class.
-    static String[] tails = { HttpNames.ServiceQuery, HttpNames.ServiceQueryAlt } ;
-    
-    @Override
-    protected String mapRequestToDataset(String uri)
-    {
-        for ( String tail : tails )
-        {
-            String x = mapRequestToDataset(uri, tail) ;
-            if ( x != null )
-                return x ;
-        }
-        return uri ; 
-    }
-    
 //    // All the params we support
 //    private static String[] params_ = { paramQuery, paramDefaultGraphURI, paramNamedGraphURI, 
 //                                        paramQueryRef,
@@ -220,9 +204,6 @@ public abstract class SPARQL_Query exten
         }
         
         validateQuery(action, query) ;
-
-        if ( query.hasDatasetDescription() )
-            errorBadRequest("Query has FROM/FROM NAMED") ;
         
         // Assumes finished whole thing by end of sendResult. 
         action.beginRead() ;

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_QueryDataset.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_QueryDataset.java?rev=1153293&r1=1153292&r2=1153293&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_QueryDataset.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_QueryDataset.java Tue Aug  2 22:28:11 2011
@@ -46,22 +46,20 @@ public class SPARQL_QueryDataset extends
 
     public SPARQL_QueryDataset()
     { this(false) ; }
-
-//    // (1) Param to constructor.
-//    // (2) DRY : to super class.
-//    static String[] tails = { HttpNames.ServiceQuery, HttpNames.ServiceQueryAlt } ;
-//    
-//    @Override
-//    protected String mapRequestToDataset(String uri)
-//    {
-//        for ( String tail : tails )
-//        {
-//            String x = mapRequestToDataset(uri, tail) ;
-//            if ( x != null )
-//                return x ;
-//        }
-//        return uri ; 
-//    }
+    
+    static String[] tails = { HttpNames.ServiceQuery, HttpNames.ServiceQueryAlt } ;
+    
+    @Override
+    protected String mapRequestToDataset(String uri)
+    {
+        for ( String tail : tails )
+        {
+            String x = mapRequestToDataset(uri, tail) ;
+            if ( x != null )
+                return x ;
+        }
+        return uri ; 
+    }
     
     // All the params we support
     private static String[] params_ = { paramQuery, 

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_QueryGeneral.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_QueryGeneral.java?rev=1153293&r1=1153292&r2=1153293&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_QueryGeneral.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_QueryGeneral.java Tue Aug  2 22:28:11 2011
@@ -18,6 +18,7 @@
 
 package org.openjena.fuseki.servlets;
 
+import static org.openjena.fuseki.Fuseki.webFileManager ;
 import static org.openjena.fuseki.HttpNames.paramAccept ;
 import static org.openjena.fuseki.HttpNames.paramCallback ;
 import static org.openjena.fuseki.HttpNames.paramDefaultGraphURI ;
@@ -29,9 +30,8 @@ import static org.openjena.fuseki.HttpNa
 import static org.openjena.fuseki.HttpNames.paramQueryRef ;
 import static org.openjena.fuseki.HttpNames.paramStyleSheet ;
 
-import java.util.ArrayList ;
 import java.util.Arrays ;
-import java.util.Enumeration ;
+import java.util.Collections ;
 import java.util.HashSet ;
 import java.util.List ;
 import java.util.Set ;
@@ -48,21 +48,14 @@ import com.hp.hpl.jena.query.DatasetFact
 import com.hp.hpl.jena.query.Query ;
 import com.hp.hpl.jena.rdf.model.Model ;
 import com.hp.hpl.jena.rdf.model.ModelFactory ;
-import com.hp.hpl.jena.util.FileManager ;
-
-// UNFINISHED
 
 public class SPARQL_QueryGeneral extends SPARQL_Query
 {
-    final FileManager fileManager ;
     final int MaxTriples = 100*1000 ; 
     
     public SPARQL_QueryGeneral(boolean verbose)
     { 
         super(verbose) ;
-        fileManager = new FileManager() ;
-        // Only know how to handle http URLs 
-        fileManager.addLocatorURL() ;
     }
 
     public SPARQL_QueryGeneral()
@@ -100,23 +93,27 @@ public class SPARQL_QueryGeneral extends
     }
     
     @Override
+    protected String mapRequestToDataset(String uri)
+    { return null ; }
+    
+    @Override
     protected Dataset decideDataset(HttpActionQuery action, Query query, String queryStringLog) 
     {
-        // Dataset comes from:
-        // default-graph-uri/named-graph-uri
-        // FROM/FROM NAMED.
-        
-        errorNotImplemented("General SPARQL query with dataset description") ;
-        return null ;
+        Dataset ds = datasetFromProtocol(action.request) ;
+        if ( ds == null )
+            ds = datasetFromQuery(query) ;
+        if ( ds == null )
+            errorBadRequest("No dataset description in protocol request or in the query string") ;
+        return ds ;
     }
     
     private boolean datasetInProtocol(HttpServletRequest request)
     {
-        String d = request.getHeader(paramDefaultGraphURI) ;
+        String d = request.getParameter(paramDefaultGraphURI) ;
         if ( d != null && !d.equals("") )
             return true ;
         
-        List<String> n = toStrList(request.getHeaders(paramNamedGraphURI)) ;
+        List<String> n = toStrList(request.getParameterValues(paramNamedGraphURI)) ;
         if ( n != null && n.size() > 0 )
             return true ;
         return false ;
@@ -124,11 +121,21 @@ public class SPARQL_QueryGeneral extends
     
     protected Dataset datasetFromProtocol(HttpServletRequest request)
     {
+        List<String> graphURLs = toStrList(request.getParameterValues(paramDefaultGraphURI)) ;
+        List<String> namedGraphs = toStrList(request.getParameterValues(paramNamedGraphURI)) ;
+        return datasetFromDescription(graphURLs, namedGraphs) ;
+    }
+    
+    protected Dataset datasetFromQuery(Query query)
+    {
+        List<String> graphURLs = query.getGraphURIs() ;
+        List<String> namedGraphs = query.getNamedGraphURIs() ;
+        return datasetFromDescription(graphURLs, namedGraphs) ;
+    }
+    
+    protected Dataset datasetFromDescription(List<String> graphURLs, List<String> namedGraphs)
+    {
         try {
-            
-            List<String> graphURLs = toStrList(request.getHeaders(paramDefaultGraphURI)) ;
-            List<String> namedGraphs = toStrList(request.getHeaders(paramNamedGraphURI)) ;
-            
             graphURLs = removeEmptyValues(graphURLs) ;
             namedGraphs = removeEmptyValues(namedGraphs) ;
             
@@ -185,7 +192,7 @@ public class SPARQL_QueryGeneral extends
                         continue ;
                     }
                     try {
-                        Model model2 = fileManager.loadModel(uri) ;
+                        Model model2 = webFileManager.loadModel(uri) ;
                         log.info("Load (named) "+uri) ;
                         dataset.addNamedModel(uri, model2) ;
                     } catch (Exception ex)
@@ -210,15 +217,11 @@ public class SPARQL_QueryGeneral extends
         
     }
 
-    private List<String> toStrList(Enumeration<?> enumeration)
+    private List<String> toStrList(String[] array)
     {
-        List<String> x = new ArrayList<String>() ;
-        for ( ; enumeration.hasMoreElements() ; )
-        {
-            String str = (String)enumeration.nextElement() ;
-            x.add(str) ;
-        }
-        return x ;
+        if ( array == null )
+            return Collections.emptyList() ;
+        return Arrays.asList(array) ;
     }
 
     private  <T>  List<T> removeEmptyValues(List<T> list)

Modified: incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_ServletBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_ServletBase.java?rev=1153293&r1=1153292&r2=1153293&view=diff
==============================================================================
--- incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_ServletBase.java (original)
+++ incubator/jena/Jena2/Fuseki/trunk/src/main/java/org/openjena/fuseki/servlets/SPARQL_ServletBase.java Tue Aug  2 22:28:11 2011
@@ -78,14 +78,16 @@ public abstract class SPARQL_ServletBase
             }
 
             uri = mapRequestToDataset(uri) ;
-            // Read only action.
-            DatasetGraph dsg = DatasetRegistry.get().get(uri) ;
-            if ( dsg == null )
+            DatasetGraph dsg = null ;
+            if ( uri != null )
             {
-                errorNotFound("No dataset for URI: "+uri) ;
-                return ;
+                dsg = DatasetRegistry.get().get(uri) ;
+                if ( dsg == null )
+                {
+                    errorNotFound("No dataset for URI: "+uri) ;
+                    return ;
+                }
             }
-
             perform(id, dsg, request, response) ;
             //serverlog.info(String.format("[%d] 200 Success", id)) ;
         } catch (ActionErrorException ex)
@@ -179,6 +181,9 @@ public abstract class SPARQL_ServletBase
         catch (IOException ex) { errorOccurred(ex) ; }
     }
 
+    /** Map request to uri in the registry.
+     *  null means no mapping done (passthrough). 
+     */
     protected abstract String mapRequestToDataset(String uri) ;
     
     /** A possible implementation for mapRequestToDataset(String) */