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 2015/10/23 22:38:02 UTC

[01/13] jena git commit: Correct access visibility.

Repository: jena
Updated Branches:
  refs/heads/master 3d8cbbdf7 -> 85b722be1


Correct access visibility.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/70db5e16
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/70db5e16
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/70db5e16

Branch: refs/heads/master
Commit: 70db5e16e84e7d513118cad2ff95a205c37173ed
Parents: 3d8cbbd
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 10:52:08 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 10:52:08 2015 +0100

----------------------------------------------------------------------
 .../src/main/java/org/apache/jena/riot/system/IRIResolver.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/70db5e16/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java b/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
index ecd581a..5887c76 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
@@ -443,7 +443,7 @@ public abstract class IRIResolver
         }
 
         @Override
-        public IRI getBaseIRI() {
+        protected IRI getBaseIRI() {
             return base ;
         }
 


[05/13] jena git commit: Typo

Posted by an...@apache.org.
Typo

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/aa5337bb
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/aa5337bb
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/aa5337bb

Branch: refs/heads/master
Commit: aa5337bb170dcdccfa134fa9c233da7170a73850
Parents: 1e58470
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 17:32:10 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 17:32:10 2015 +0100

----------------------------------------------------------------------
 .../src/main/java/org/apache/jena/fuseki/server/DataService.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/aa5337bb/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataService.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataService.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataService.java
index bf341a2..a8610c4 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataService.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/DataService.java
@@ -90,7 +90,7 @@ public class DataService { //implements DatasetMXBean {
     }
 
     /** Return the OperationNames available here.
-     *  @see #getOperation(OperationName) to ge the endpoint list
+     *  @see #getOperation(OperationName) to get the endpoint list
      */
     public Collection<OperationName> getOperations() {
         return operations.keySet() ;


[08/13] jena git commit: Tidy tests.

Posted by an...@apache.org.
Tidy tests.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/9af00abf
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/9af00abf
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/9af00abf

Branch: refs/heads/master
Commit: 9af00abf079c6b025b155ec2b739b3ee28b303ef
Parents: 33bb6a8
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 17:35:06 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 17:35:06 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/jena/fuseki/FusekiTest.java | 106 +++++++++++++++++++
 .../java/org/apache/jena/fuseki/ServerTest.java |  17 +--
 .../java/org/apache/jena/fuseki/TestAdmin.java  |  61 ++---------
 .../java/org/apache/jena/fuseki/TestAuth.java   |   2 +-
 .../org/apache/jena/fuseki/TestDatasetOps.java  |   8 +-
 .../org/apache/jena/fuseki/TestFileUpload.java  |  22 ++--
 .../java/org/apache/jena/fuseki/TestQuery.java  |  11 +-
 .../apache/jena/fuseki/TestSPARQLProtocol.java  |   3 +-
 .../fuseki/http/TestDatasetAccessorHTTP.java    |  27 ++---
 .../http/TestDatasetGraphAccessorHTTP.java      |   2 +-
 .../org/apache/jena/fuseki/http/TestHttpOp.java |  38 +++----
 11 files changed, 172 insertions(+), 125 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/9af00abf/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/FusekiTest.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/FusekiTest.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/FusekiTest.java
new file mode 100644
index 0000000..441d7f0
--- /dev/null
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/FusekiTest.java
@@ -0,0 +1,106 @@
+/**
+ * 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;
+
+import java.io.IOException ;
+import java.util.Objects ;
+
+import org.apache.http.HttpResponse ;
+import org.apache.http.StatusLine ;
+import org.apache.http.client.HttpClient ;
+import org.apache.http.client.methods.HttpOptions ;
+import org.apache.http.client.methods.HttpUriRequest ;
+import org.apache.http.impl.client.SystemDefaultHttpClient ;
+import org.apache.http.protocol.HttpContext ;
+import org.apache.http.util.EntityUtils ;
+import org.apache.jena.atlas.web.HttpException ;
+import org.apache.jena.riot.web.HttpNames ;
+import org.apache.jena.riot.web.HttpResponseHandler ;
+import org.apache.jena.riot.web.HttpResponseLib ;
+import org.apache.jena.web.HttpSC ;
+import org.junit.Assert ;
+
+public class FusekiTest {
+
+    /** Check whether str is a comma separated list of expected (unordered) */
+    public static void assertStringList(String str, String... expected) {
+        str = str.replace(" ", "") ;
+        String[] x = str.split(",") ;
+        int count = 0 ;
+        for ( String ex : expected ) {
+            Assert.assertTrue("Got: "+str+" - Does not contain "+ex, containsStr(ex, x)) ;
+        }
+        for ( String s : x ) {
+            Assert.assertTrue("Got: "+str+" - Not expected "+s, containsStr(s, expected)) ;
+        }
+    }
+
+    /** Is v in the list of strings? */
+    public static boolean containsStr(String v, String[] strings) {
+        for ( String s: strings ) {
+            if ( Objects.equals(v, s)) 
+                return true ;
+        }
+        return false ;
+    }
+
+    /** Do an HTTP Options. */
+    public static String execOptions(String url) {
+        try {
+            // Prepare and execute
+            HttpResponseHandler handler = HttpResponseLib.nullResponse ;
+            HttpClient httpClient = new SystemDefaultHttpClient() ;
+            HttpUriRequest request = new HttpOptions(url) ;
+            HttpResponse response = httpClient.execute(request, (HttpContext)null);
+            
+            // Response
+            StatusLine statusLine = response.getStatusLine();
+            int statusCode = statusLine.getStatusCode();
+            if (HttpSC.isClientError(statusCode) || HttpSC.isServerError(statusCode)) {
+                // Error responses can have bodies so it is important to clear up.
+                String contentPayload = "" ;
+                if ( response.getEntity() != null )
+                    contentPayload = EntityUtils.toString(response.getEntity()) ;
+                throw new HttpException(statusLine.getStatusCode(), statusLine.getReasonPhrase(), contentPayload);
+            }
+            if (handler != null)
+                handler.handle(url, response);
+            return response.getFirstHeader(HttpNames.hAllow).getValue() ;
+        } catch (IOException ex) {
+            throw new HttpException(ex);
+        }
+    }
+    
+    public static void exec404(Runnable action) {
+        execWithHttpException(HttpSC.NOT_FOUND_404, action) ;
+    }
+    
+    public static void execWithHttpException(int statusCode, Runnable action) { 
+        try {
+            action.run();
+            Assert.fail("Expected HttpException") ;
+        } catch (HttpException ex) {
+            // -1 : any status code in HttpException 
+            if ( statusCode > 0 )
+                Assert.assertEquals(statusCode, ex.getResponseCode()) ;
+                
+        }
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/9af00abf/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/ServerTest.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/ServerTest.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/ServerTest.java
index 5e916ac..bbe0db7 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/ServerTest.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/ServerTest.java
@@ -59,7 +59,7 @@ public class ServerTest {
     public static final String  urlDataset    = "http://localhost:" + port + datasetPath ;
     public static final String  serviceUpdate = urlDataset + "/update" ;
     public static final String  serviceQuery  = urlDataset + "/query" ;
-    public static final String  serviceREST   = urlDataset + "/data" ;
+    public static final String  serviceGSP    = urlDataset + "/data" ;
 
     public static final String  gn1           = "http://graph/1" ;
     public static final String  gn2           = "http://graph/2" ;
@@ -85,8 +85,12 @@ public class ServerTest {
     // static { allocServer() ; }
 
     static public void allocServer() {
+        allocServer(true) ;
+    }
+    
+    static public void allocServer(boolean updateable) {
         if ( countServer == 0 )
-            setupServer() ;
+            setupServer(updateable) ;
         countServer++ ;
     }
 
@@ -98,16 +102,16 @@ public class ServerTest {
         }
     }
 
-    protected static void setupServer() {
+    protected static void setupServer(boolean updateable) {
         FusekiEnv.FUSEKI_HOME = Paths.get(TS_Fuseki.FusekiTestHome).toAbsolutePath() ;
         FileOps.ensureDir("target");
         FileOps.ensureDir(TS_Fuseki.FusekiTestHome);
         FileOps.ensureDir(TS_Fuseki.FusekiTestBase) ;
         FusekiEnv.FUSEKI_BASE = Paths.get(TS_Fuseki.FusekiTestBase).toAbsolutePath() ;
-        setupServer(ServerTest.port, null, ServerTest.datasetPath) ;
+        setupServer(ServerTest.port, null, ServerTest.datasetPath, updateable) ;
     }
     
-    protected static void setupServer(int port, String authConfigFile, String datasetPath) {
+    protected static void setupServer(int port, String authConfigFile, String datasetPath, boolean updateable) {
         SystemState.location = Location.mem() ;
         SystemState.init$() ;
         
@@ -115,7 +119,8 @@ public class ServerTest {
         DatasetGraph dsg = DatasetGraphFactory.createMem() ;
         params.dsg = dsg ;
         params.datasetPath = datasetPath ;
-        params.allowUpdate = true ;
+        params.allowUpdate = updateable ;
+        
         FusekiServerListener.initialSetup = params ;
         
         JettyServerConfig config = make(port, true, true) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/9af00abf/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAdmin.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAdmin.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAdmin.java
index 17bc77f..2a2e46a 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAdmin.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAdmin.java
@@ -40,7 +40,6 @@ import org.apache.jena.atlas.json.JSON ;
 import org.apache.jena.atlas.json.JsonArray ;
 import org.apache.jena.atlas.json.JsonObject ;
 import org.apache.jena.atlas.json.JsonValue ;
-import org.apache.jena.atlas.junit.BaseTest ;
 import org.apache.jena.atlas.lib.Lib ;
 import org.apache.jena.atlas.web.HttpException ;
 import org.apache.jena.atlas.web.TypedInputStream ;
@@ -49,30 +48,14 @@ import org.apache.jena.riot.WebContent ;
 import org.apache.jena.riot.web.HttpOp ;
 import org.apache.jena.riot.web.HttpResponseHandler ;
 import org.apache.jena.web.HttpSC ;
-import org.junit.After ;
-import org.junit.AfterClass ;
-import org.junit.Before ;
 import org.junit.Test ;
 
 /** Tests of the admin functionality */
-public class TestAdmin extends BaseTest {
+public class TestAdmin extends AbstractFusekiTest {
     
     // Name of the dataset in the assembler file.
     static String dsTest = "test-ds2" ;
     
-    @Before public void beforeTest() {
-        ServerTest.allocServer() ;
-        ServerTest.resetServer() ;
-    }
-    
-    @After public void afterTest() {
-        ServerTest.freeServer() ;
-    }
-
-    @AfterClass public static void afterClass() {
-        ServerTest.teardownServer() ;
-    }
-  
     // --- Ping 
     
     @Test public void ping_1() {
@@ -120,11 +103,7 @@ public class TestAdmin extends BaseTest {
     
     // Specific dataset
     @Test public void list_datasets_4() {
-        try {
-            getDatasetDescription("does-not-exist") ;
-        } catch (HttpException ex) {
-            assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()) ;
-        }
+        FusekiTest.exec404( () -> getDatasetDescription("does-not-exist") ) ;
     }
     
     // Specific dataset
@@ -184,12 +163,7 @@ public class TestAdmin extends BaseTest {
     
     @Test public void delete_dataset_1() {
         String name = "NoSuchDataset" ;
-        try {
-            execHttpDelete(ServerTest.urlRoot+"$/"+opDatasets+"/"+name) ;
-            fail("delete did not cause an Http Exception") ;
-        } catch ( HttpException ex ) {
-            assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()) ;
-        }
+        FusekiTest.exec404( ()-> execHttpDelete(ServerTest.urlRoot+"$/"+opDatasets+"/"+name) ) ;
     }
 
     // ---- Active/Offline.
@@ -218,9 +192,7 @@ public class TestAdmin extends BaseTest {
 
     @Test public void state_3() {
         addTestDataset() ;
-        try {
-            execHttpPost(ServerTest.urlRoot+"$/"+opDatasets+"/DoesNotExist?state=offline", null) ;
-        } catch (HttpException ex) { assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()) ; }
+        FusekiTest.exec404(()->execHttpPost(ServerTest.urlRoot+"$/"+opDatasets+"/DoesNotExist?state=offline", null)) ;
         deleteDataset(dsTest) ;
     }
     
@@ -244,10 +216,9 @@ public class TestAdmin extends BaseTest {
 
     @Test public void stats_3() {
         addTestDataset() ;
-        try {
+        FusekiTest.exec404(()->{
             JsonValue v = execGetJSON(urlRoot+"$/"+opStats+"/DoesNotExist") ;
-            checkJsonStatsAll(v);
-        } catch (HttpException ex) { assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()); }
+        }) ;
         deleteDataset(dsTest) ;
     }
 
@@ -262,11 +233,7 @@ public class TestAdmin extends BaseTest {
     @Test public void task_2() {
         String x = "NoSuchTask" ;
         String url = urlRoot+"$/tasks/"+x ;
-        try {
-            httpGetJson(url) ;
-        } catch (HttpException ex) {
-            assertEquals(404, ex.getResponseCode()) ;
-        }
+        FusekiTest.exec404(()->httpGetJson(url) ) ;
         try { 
             checkInTasks(x) ;
             fail("No failure!") ;
@@ -454,18 +421,10 @@ private static void deleteDataset(String name) {
     }
 
     private static void checkNotThere(String name) {
-        if ( name.startsWith("/") )
-            name = name.substring(1) ;
+        String n = (name.startsWith("/")) ? name.substring(1) : name ;
         // Check gone exists.
-        try { adminPing(name) ; }
-        catch (HttpException ex) {
-            assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()) ;
-        }
-        
-        try { askPing(name) ; }
-        catch (HttpException ex) {
-            assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()) ;
-        }
+        FusekiTest.exec404(()->  adminPing(n) ) ;
+        FusekiTest.exec404(() -> askPing(n) ) ;
     }
 
     private static void checkJsonDatasetsAll(JsonValue v) {

http://git-wip-us.apache.org/repos/asf/jena/blob/9af00abf/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAuth.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAuth.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAuth.java
index cef7a22..a5158d2 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAuth.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAuth.java
@@ -82,7 +82,7 @@ public class TestAuth {
         LogCtl.logLevel(Fuseki.actionLog.getName(), org.apache.log4j.Level.WARN, java.util.logging.Level.WARNING);
         LogCtl.logLevel("org.eclipse.jetty", org.apache.log4j.Level.WARN, java.util.logging.Level.WARNING);
 
-        ServerTest.setupServer(authPort, realmFile.getAbsolutePath(), authDatasetPath);
+        ServerTest.setupServer(authPort, realmFile.getAbsolutePath(), authDatasetPath, true);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/jena/blob/9af00abf/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestDatasetOps.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestDatasetOps.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestDatasetOps.java
index 7107310..179a020 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestDatasetOps.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestDatasetOps.java
@@ -19,7 +19,7 @@
 package org.apache.jena.fuseki;
 
 import static org.apache.jena.fuseki.ServerTest.serviceQuery ;
-import static org.apache.jena.fuseki.ServerTest.serviceREST ;
+import static org.apache.jena.fuseki.ServerTest.serviceGSP ;
 import static org.apache.jena.fuseki.ServerTest.urlDataset ;
 import org.apache.http.HttpEntity ;
 import org.apache.http.entity.EntityTemplate ;
@@ -65,15 +65,15 @@ public class TestDatasetOps extends AbstractFusekiTest
     }
 
     @Test public void gsp_x_02() {
-        gsp_x(urlDataset, serviceREST) ;
+        gsp_x(urlDataset, serviceGSP) ;
     }
 
     @Test public void gsp_x_03() {
-        gsp_x(serviceREST, urlDataset) ;
+        gsp_x(serviceGSP, urlDataset) ;
     }
 
     @Test public void gsp_x_04() {
-        gsp_x(serviceREST, urlDataset) ;
+        gsp_x(serviceGSP, urlDataset) ;
     }
 
     private void gsp_x(String outward, String inward) {

http://git-wip-us.apache.org/repos/asf/jena/blob/9af00abf/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestFileUpload.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestFileUpload.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestFileUpload.java
index eb96560..d351c7d 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestFileUpload.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestFileUpload.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.fuseki;
 
-import static org.apache.jena.fuseki.ServerTest.serviceREST ;
+import static org.apache.jena.fuseki.ServerTest.serviceGSP ;
 import org.apache.jena.atlas.web.TypedInputStream ;
 import org.apache.jena.fuseki.http.TestDatasetAccessorHTTP ;
 import org.apache.jena.fuseki.http.TestHttpOp ;
@@ -42,12 +42,12 @@ public class TestFileUpload extends AbstractFusekiTest
 {
     @Test public void upload_gsp_01()
     {
-        FileSender x = new FileSender(ServerTest.serviceREST+"?default") ;
+        FileSender x = new FileSender(serviceGSP+"?default") ;
         x.add("D.ttl", "<http://example/s> <http://example/p> <http://example/o> .", "text/turtle") ;
         x.send("POST") ;
         
         Model m = ModelFactory.createDefaultModel() ;
-        TypedInputStream in = HttpOp.execHttpGet(serviceREST, "text/turtle") ;
+        TypedInputStream in = HttpOp.execHttpGet(serviceGSP, "text/turtle") ;
         RDFDataMgr.read(m, in, RDFLanguages.contentTypeToLang(in.getMediaType()) ) ;
         // which is is effectively :
 //        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
@@ -57,13 +57,13 @@ public class TestFileUpload extends AbstractFusekiTest
     
     @Test public void upload_gsp_02()
     {
-        FileSender x = new FileSender(ServerTest.serviceREST+"?default") ;
+        FileSender x = new FileSender(ServerTest.serviceGSP+"?default") ;
         x.add("D.ttl", "<http://example/s> <http://example/p> 123 .", "text/turtle") ;
         x.add("D.nt", "<http://example/s> <http://example/p> <http://example/o-456> .", "application/n-triples") ;
         x.send("PUT") ;
         
         // BUG
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP) ;
         Model m = du.getModel() ;
         assertEquals(2, m.size()) ;
     }
@@ -71,12 +71,12 @@ public class TestFileUpload extends AbstractFusekiTest
     // Extension of GSP - no graph selector => dataset
     @Test public void upload_gsp_03()
     {
-        FileSender x = new FileSender(ServerTest.serviceREST) ;
+        FileSender x = new FileSender(ServerTest.serviceGSP) ;
         x.add("D.ttl", "<http://example/s> <http://example/p> <http://example/o> .", "text/turtle") ;
         x.add("D.trig", "<http://example/g> { <http://example/s> <http://example/p> <http://example/o> }", "text/trig") ;
         x.send("POST") ;
         
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP) ;
         Model m = du.getModel() ;
         assertEquals(1, m.size()) ;
     }
@@ -84,7 +84,7 @@ public class TestFileUpload extends AbstractFusekiTest
     @Test public void upload_gsp_04()
     {
         {
-            DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+            DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP) ;
             Model m = du.getModel() ;
             assertEquals(0, m.size()) ;
         }
@@ -93,7 +93,7 @@ public class TestFileUpload extends AbstractFusekiTest
         x.add("D.trig", "<http://example/g> { <http://example/s> <http://example/p> 123,456 }", "text/plain") ;
         x.send("POST") ;
         
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP) ;
         Model m = du.getModel() ;
         assertEquals(1, m.size()) ;
         m = du.getModel("http://example/g") ;
@@ -107,7 +107,7 @@ public class TestFileUpload extends AbstractFusekiTest
         x.add("D.nq", "", "application/-n-quads") ;
         x.send("PUT") ;
         
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP) ;
         Model m = du.getModel() ;
         assertEquals(0, m.size()) ;
     }
@@ -117,7 +117,7 @@ public class TestFileUpload extends AbstractFusekiTest
         x.add("D.nq", "<http://example/s> <http://example/p> <http://example/o-456> <http://example/g> .", "application/n-quads") ;
         x.send("PUT") ;
         
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP) ;
         Model m = du.getModel("http://example/g") ;
         assertEquals(1, m.size()) ;
         m = du.getModel() ;

http://git-wip-us.apache.org/repos/asf/jena/blob/9af00abf/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java
index 08c837d..3a47102 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestQuery.java
@@ -23,7 +23,7 @@ import static org.apache.jena.fuseki.ServerTest.gn2 ;
 import static org.apache.jena.fuseki.ServerTest.model1 ;
 import static org.apache.jena.fuseki.ServerTest.model2 ;
 import static org.apache.jena.fuseki.ServerTest.serviceQuery ;
-import static org.apache.jena.fuseki.ServerTest.serviceREST ;
+import static org.apache.jena.fuseki.ServerTest.serviceGSP ;
 
 import java.io.IOException ;
 import java.net.HttpURLConnection ;
@@ -61,15 +61,14 @@ public class TestQuery extends BaseTest {
     @BeforeClass
     public static void beforeClass() {
         ServerTest.allocServer() ;
-        ServerTest.resetServer() ;
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP) ;
         du.putModel(model1) ;
         du.putModel(gn1, model2) ;
     }
 
     @AfterClass
     public static void afterClass() {
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP) ;
         du.deleteDefault() ;
         ServerTest.freeServer() ;
     }
@@ -111,7 +110,7 @@ public class TestQuery extends BaseTest {
 
     @Test
     public void query_dynamic_dataset_01() {
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP) ;
         du.putModel(model1);
         du.putModel(gn1, model2);
         {
@@ -136,7 +135,7 @@ public class TestQuery extends BaseTest {
     
     @Test
     public void query_dynamic_dataset_02() {
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP) ;
         du.putModel(model1);
         du.putModel(gn1, model1);
         du.putModel(gn2, model2);

http://git-wip-us.apache.org/repos/asf/jena/blob/9af00abf/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestSPARQLProtocol.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestSPARQLProtocol.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestSPARQLProtocol.java
index bd53495..32bc663 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestSPARQLProtocol.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestSPARQLProtocol.java
@@ -37,9 +37,8 @@ public class TestSPARQLProtocol extends BaseTest
     @BeforeClass
     public static void beforeClass() {
         ServerTest.allocServer();
-        ServerTest.resetServer();
         // Load some data.
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST);
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP);
         du.putModel(model1);
         du.putModel(gn1, model2);
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/9af00abf/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestDatasetAccessorHTTP.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestDatasetAccessorHTTP.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestDatasetAccessorHTTP.java
index d7056d3..457ab96 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestDatasetAccessorHTTP.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestDatasetAccessorHTTP.java
@@ -21,6 +21,7 @@ package org.apache.jena.fuseki.http;
 import static org.apache.jena.fuseki.ServerTest.* ;
 import org.apache.jena.atlas.junit.BaseTest ;
 import org.apache.jena.atlas.web.HttpException ;
+import org.apache.jena.fuseki.FusekiTest ;
 import org.apache.jena.fuseki.ServerTest ;
 import org.apache.jena.query.DatasetAccessor ;
 import org.apache.jena.query.DatasetAccessorFactory ;
@@ -39,7 +40,7 @@ public class TestDatasetAccessorHTTP extends BaseTest
     //Model level testing.
     
     static final String datasetURI_not_1    = "http://localhost:"+port+"/junk" ;
-    static final String datasetURI_not_2    = serviceREST+"/not" ;
+    static final String datasetURI_not_2    = serviceGSP+"/not" ;
     static final String datasetURI_not_3    = "http://localhost:"+port+datasetPath+"/not/data" ;
     
     @BeforeClass public static void beforeClass()   { ServerTest.allocServer() ; }
@@ -51,33 +52,23 @@ public class TestDatasetAccessorHTTP extends BaseTest
     {
         // Can GET the dataset service.
         try {
-            HttpOp.execHttpGet(serviceREST) ;
+            HttpOp.execHttpGet(serviceGSP) ;
         } catch (HttpException ex) {
             assertTrue(HttpSC.isClientError(ex.getResponseCode())) ;
             throw ex ;
         }
     }
     
-    @Test(expected=HttpException.class)
+    @Test
     public void test_ds_2()
     {
-        try {
-            HttpOp.execHttpGet(datasetURI_not_1) ;
-        } catch (HttpException ex) {
-            assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()) ;
-            throw ex ;
-        }
+        FusekiTest.exec404(()->HttpOp.execHttpGet(datasetURI_not_1)) ;
     }
 
-    @Test(expected=HttpException.class)
+    @Test
     public void test_ds_3()
     {
-        try {
-            HttpOp.execHttpGet(datasetURI_not_2) ;
-        } catch (HttpException ex) {
-            assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()) ;
-            throw ex ;
-        }
+        FusekiTest.exec404(()->HttpOp.execHttpGet(datasetURI_not_2)) ;
     }
 
     @Test
@@ -101,7 +92,7 @@ public class TestDatasetAccessorHTTP extends BaseTest
     public void test_404_3()
     {
         // Right service, wrong graph
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceGSP) ;
         Model graph = du.getModel(gn99) ;
         assertNull(graph) ;
     }
@@ -317,7 +308,7 @@ public class TestDatasetAccessorHTTP extends BaseTest
 
     static DatasetAccessor connectToService()
     {
-        return DatasetAccessorFactory.createHTTP(ServerTest.serviceREST) ;
+        return DatasetAccessorFactory.createHTTP(ServerTest.serviceGSP) ;
     }
     
     static DatasetAccessor connectToDataset()

http://git-wip-us.apache.org/repos/asf/jena/blob/9af00abf/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestDatasetGraphAccessorHTTP.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestDatasetGraphAccessorHTTP.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestDatasetGraphAccessorHTTP.java
index 7687b2c..964511f 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestDatasetGraphAccessorHTTP.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestDatasetGraphAccessorHTTP.java
@@ -38,6 +38,6 @@ public class TestDatasetGraphAccessorHTTP extends AbstractTestDatasetGraphAccess
     @Override
     protected DatasetGraphAccessor getDatasetUpdater()
     {
-        return new DatasetGraphAccessorHTTP(ServerTest.serviceREST) ;
+        return new DatasetGraphAccessorHTTP(ServerTest.serviceGSP) ;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/9af00abf/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java
index b8ad9de..488c517 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java
@@ -18,30 +18,26 @@
 
 package org.apache.jena.fuseki.http;
 
-import org.apache.jena.atlas.junit.BaseTest ;
 import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.atlas.web.HttpException ;
 import org.apache.jena.atlas.web.TypedInputStream ;
+import org.apache.jena.fuseki.AbstractFusekiTest ;
+import org.apache.jena.fuseki.FusekiTest ;
 import org.apache.jena.fuseki.ServerTest ;
 import org.apache.jena.riot.WebContent ;
 import org.apache.jena.riot.web.HttpOp ;
 import org.apache.jena.sparql.engine.http.Params ;
 import org.apache.jena.web.HttpSC ;
-import org.junit.AfterClass ;
-import org.junit.BeforeClass ;
 import org.junit.Test ;
 
 // This a mixture of testing HttpOp and testing basic operation of the SPARQL server
 // especially error cases abnd unusual usage that the higher level APIs don't use.
-public class TestHttpOp extends BaseTest {
+public class TestHttpOp extends AbstractFusekiTest {
     
-    static String pingURL = ServerTest.urlRoot+"$/ping" ;
-    @BeforeClass public static void beforeClass() { ServerTest.allocServer() ; }
-    @AfterClass  public static void afterClass()  { ServerTest.freeServer() ; }
-    
-    static String gspServiceURL     = ServerTest.serviceREST ;
-    static String defaultGraphURL   = ServerTest.serviceREST+"?default" ;
-    static String namedGraphURL     = ServerTest.serviceREST+"?graph=http://example/g" ;
+    static String pingURL           = ServerTest.urlRoot+"$/ping" ;
+    static String gspServiceURL     = ServerTest.serviceGSP ;
+    static String defaultGraphURL   = ServerTest.serviceGSP+"?default" ;
+    static String namedGraphURL     = ServerTest.serviceGSP+"?graph=http://example/g" ;
     static String queryURL          = ServerTest.serviceQuery ;
     static String updateURL         = ServerTest.serviceUpdate ;
     
@@ -53,13 +49,11 @@ public class TestHttpOp extends BaseTest {
         try ( TypedInputStream in = HttpOp.execHttpGet(pingURL) ) {}
     }
     
-    @Test(expected=HttpException.class) 
+    @Test
     public void httpGet_02() {
-        try ( TypedInputStream in = HttpOp.execHttpGet(ServerTest.urlRoot+"does-not-exist") ) { }
-        catch(HttpException ex) {
-            assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()) ;
-            throw ex ;
-        }
+        FusekiTest.exec404(() -> {
+            try (TypedInputStream in = HttpOp.execHttpGet(ServerTest.urlRoot + "does-not-exist")) {}
+        });
     }
 
     @Test public void httpGet_03() {
@@ -185,7 +179,7 @@ public class TestHttpOp extends BaseTest {
     }
     
     @Test public void gsp_06() {
-        //HttpOp.execHttpDelete(namedGraphURL) ; -- woudl be 404.
+        //HttpOp.execHttpDelete(namedGraphURL) ; -- would be 404.
         
         HttpOp.execHttpPost(namedGraphURL, WebContent.contentTypeTurtle, graphString) ;
         String s1 = HttpOp.execHttpGetString(namedGraphURL, WebContent.contentTypeNTriples) ;
@@ -196,13 +190,7 @@ public class TestHttpOp extends BaseTest {
         String s3 = HttpOp.execHttpGetString(defaultGraphURL, WebContent.contentTypeNTriples) ;
         assertTrue(s3.isEmpty()) ;
         
-        try {
-            HttpOp.execHttpDelete(namedGraphURL) ;
-            fail("Expected 404") ;
-        } catch (HttpException ex) {
-            assertEquals(ex.getResponseCode(), HttpSC.NOT_FOUND_404) ;
-        }
-        
+        FusekiTest.exec404(()->HttpOp.execHttpDelete(namedGraphURL)) ;
     }
 
     // Extended GSP - no ?default, no ?graph acts on the datasets as a whole.  


[06/13] jena git commit: Add name to differentiate R and RW on quads/datatset.

Posted by an...@apache.org.
Add name to differentiate R and RW on quads/datatset.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/b764a944
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/b764a944
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/b764a944

Branch: refs/heads/master
Commit: b764a94492731b2b6992da4ef5f0def4e916eab8
Parents: aa5337b
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 17:33:17 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 17:33:17 2015 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/jena/fuseki/server/OperationName.java | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/b764a944/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/OperationName.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/OperationName.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/OperationName.java
index 0abcf20..8cf2c9c 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/OperationName.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/OperationName.java
@@ -20,13 +20,13 @@ package org.apache.jena.fuseki.server;
 
 public enum OperationName {
     // Fixed names give the codebase some resilience.
-    
     Query("SPARQL Query"),
     Update("SPARQL Update"),
     Upload("File Upload"),
-    GSP("Graph Store Protocol"),
+    GSP_RW("Graph Store Protocol"),
     GSP_R("Graph Store Protocol (Read)"),
-    Quads("HTTP Quads")
+    Quads_RW("HTTP Quads"),
+    Quads_R("HTTP Quads (Read)")
     ;
     
     private final String description ;


[09/13] jena git commit: JENA-1055: Handle OPTIONS for query and update.

Posted by an...@apache.org.
JENA-1055: Handle OPTIONS for query and update.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/e9ef60b3
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/e9ef60b3
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/e9ef60b3

Branch: refs/heads/master
Commit: e9ef60b30bfc92dc00bd2d895f2d38cbf35d8510
Parents: 9af00ab
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 17:37:32 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 19:47:46 2015 +0100

----------------------------------------------------------------------
 .../jena/fuseki/servlets/SPARQL_Query.java      | 70 ++++++++++++--------
 .../jena/fuseki/servlets/SPARQL_Update.java     | 18 ++++-
 2 files changed, 59 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/e9ef60b3/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
index 55225c9..33b2b91 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Query.java
@@ -71,6 +71,8 @@ public abstract class SPARQL_Query extends SPARQL_Protocol
     }
 
     // Choose REST verbs to support.
+    
+    // doMethod : Not used with UberServlet dispatch.
 
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response) {
@@ -82,40 +84,15 @@ public abstract class SPARQL_Query extends SPARQL_Protocol
         doCommon(request, response) ;
     }
 
-    // HEAD
-
     @Override
     protected void doOptions(HttpServletRequest request, HttpServletResponse response) {
         setCommonHeadersForOptions(response) ;
         response.setHeader(HttpNames.hAllow, "GET,OPTIONS,POST") ;
         response.setHeader(HttpNames.hContentLengh, "0") ;
     }
-
-    @Override
-    protected final void perform(HttpAction action) {
-        // GET
-        if ( action.request.getMethod().equals(HttpNames.METHOD_GET) ) {
-            executeWithParameter(action) ;
-            return ;
-        }
-
-        ContentType ct = FusekiLib.getContentType(action) ;
-
-        // POST application/x-www-form-url
-        // POST ?query= and no Content-Type
-        if ( ct == null || isHtmlForm(ct) ) {
-            // validation checked that if no Content-type, then its a POST with ?query=
-            executeWithParameter(action) ;
-            return ;
-        }
-
-        // POST application/sparql-query
-        if ( matchContentType(ct, ctSPARQLQuery) ) {
-            executeBody(action) ;
-            return ;
-        }
-
-        ServletOps.error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415, "Bad content type: " + ct.getContentType()) ;
+    
+    protected void doOptions(HttpAction action) {
+        doOptions(action.request, action.response) ;
     }
 
     // All the params we support
@@ -131,6 +108,9 @@ public abstract class SPARQL_Query extends SPARQL_Protocol
     @Override
     protected void validate(HttpAction action) {
         String method = action.request.getMethod().toUpperCase(Locale.ROOT) ;
+        
+        if ( HttpNames.METHOD_OPTIONS.equals(method) )
+            return ;
 
         if ( !HttpNames.METHOD_POST.equals(method) && !HttpNames.METHOD_GET.equals(method) )
             ServletOps.errorMethodNotAllowed("Not a GET or POST request") ;
@@ -207,6 +187,40 @@ public abstract class SPARQL_Query extends SPARQL_Protocol
         }
     }
 
+    @Override
+    protected final void perform(HttpAction action) {
+        // OPTIONS
+        if ( action.request.getMethod().equals(HttpNames.METHOD_OPTIONS) ) {
+            // Share with update via SPARQL_Protocol.
+            doOptions(action) ;
+            return ;
+        }
+        
+        // GET
+        if ( action.request.getMethod().equals(HttpNames.METHOD_GET) ) {
+            executeWithParameter(action) ;
+            return ;
+        }
+
+        ContentType ct = FusekiLib.getContentType(action) ;
+    
+        // POST application/x-www-form-url
+        // POST ?query= and no Content-Type
+        if ( ct == null || isHtmlForm(ct) ) {
+            // validation checked that if no Content-type, then its a POST with ?query=
+            executeWithParameter(action) ;
+            return ;
+        }
+    
+        // POST application/sparql-query
+        if ( matchContentType(ct, ctSPARQLQuery) ) {
+            executeBody(action) ;
+            return ;
+        }
+    
+        ServletOps.error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415, "Bad content type: " + ct.getContentType()) ;
+    }
+
     private void executeWithParameter(HttpAction action) {
         String queryString = action.request.getParameter(paramQuery) ;
         execute(queryString, action) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/e9ef60b3/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java
index 297cd17..d01bb31 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Update.java
@@ -72,6 +72,8 @@ public class SPARQL_Update extends SPARQL_Protocol
     public SPARQL_Update()
     { super() ; }
 
+    // doMethod : Not used with UberServlet dispatch.
+    
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response) 
             throws ServletException, IOException {
@@ -90,6 +92,10 @@ public class SPARQL_Update extends SPARQL_Protocol
         response.setHeader(HttpNames.hAllow, "OPTIONS,POST") ;
         response.setHeader(HttpNames.hContentLengh, "0") ;
     }
+    
+    protected void doOptions(HttpAction action) {
+        doOptions(action.request, action.response) ;
+    }
 
     @Override
     protected void perform(HttpAction action) {
@@ -115,8 +121,11 @@ public class SPARQL_Update extends SPARQL_Protocol
     @Override
     protected void validate(HttpAction action) {
         HttpServletRequest request = action.request ;
+        
+        if ( HttpNames.METHOD_OPTIONS.equals(request.getMethod()) )
+            return ;
 
-        if ( !HttpNames.METHOD_POST.equalsIgnoreCase(request.getMethod()) )
+        if ( ! HttpNames.METHOD_POST.equalsIgnoreCase(request.getMethod()) )
             ServletOps.errorMethodNotAllowed("SPARQL Update : use POST") ;
 
         ContentType ct = FusekiLib.getContentType(action) ;
@@ -198,6 +207,13 @@ public class SPARQL_Update extends SPARQL_Protocol
     }
     
     private void execute(HttpAction action, InputStream input) {
+        // OPTIONS
+        if ( action.request.getMethod().equals(HttpNames.METHOD_OPTIONS) ) {
+            // Share with update via SPARQL_Protocol.
+            doOptions(action) ;
+            return ;
+        }
+        
         UsingList usingList = processProtocol(action.request) ;
         
         // If the dsg is transactional, then we can parse and execute the update in a streaming fashion.


[11/13] jena git commit: Allow for old and new names.

Posted by an...@apache.org.
Allow for old and new names.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/32e78fa7
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/32e78fa7
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/32e78fa7

Branch: refs/heads/master
Commit: 32e78fa7c23ded9b4904301b7e4373daab3f7cee
Parents: d61d1ca
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 20:29:30 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 20:29:30 2015 +0100

----------------------------------------------------------------------
 .../jena-fuseki-core/src/main/webapp/js/app/models/dataset.js | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/32e78fa7/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/app/models/dataset.js
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/app/models/dataset.js b/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/app/models/dataset.js
index 80dc092..9c911c2 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/app/models/dataset.js
+++ b/jena-fuseki2/jena-fuseki-core/src/main/webapp/js/app/models/dataset.js
@@ -126,7 +126,10 @@ define(
 
       /** Return the GSP write URL for this dataset, if it has one, or null */
       graphStoreProtocolURL: function() {
-        return this.endpointURL( "GSP" ) ;
+        if ( this.endpointURL( "GSP" ) )
+            // Old name
+            return this.endpointURL( "GSP" ) ;
+        return this.endpointURL( "GSP_RW" ) ;
       },
 
       /** Return the GSP read URL for this dataset, if it has one, or null */
@@ -248,4 +251,4 @@ define(
 
     return Dataset;
   }
-);
\ No newline at end of file
+);


[04/13] jena git commit: Remove stray blank line.

Posted by an...@apache.org.
Remove stray blank line.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/1e58470e
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/1e58470e
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/1e58470e

Branch: refs/heads/master
Commit: 1e58470e539bb2446914112d7f56114ca020d2db
Parents: 85602bc
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 17:31:44 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 17:31:44 2015 +0100

----------------------------------------------------------------------
 jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/1e58470e/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java b/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java
index af15916..67bcf87 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java
@@ -1114,7 +1114,6 @@ public class HttpOp {
         }
     }
 
-
 	public static String readPayload(HttpEntity entity) throws IOException {
 		if (entity == null) {
 			return null;


[13/13] jena git commit: Remove dev code.

Posted by an...@apache.org.
Remove dev code.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/85b722be
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/85b722be
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/85b722be

Branch: refs/heads/master
Commit: 85b722be16eafe9ba994f0cbe74f690db744d27e
Parents: dba52b9
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 20:31:01 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 20:31:01 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java    | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/85b722be/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
index 1a49956..cf92264 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
@@ -152,7 +152,6 @@ public abstract class SPARQL_UberServlet extends ActionSPARQL
         String method = request.getMethod() ;
         
         DataAccessPoint desc = action.getDataAccessPoint() ;
-        System.err.println("**** SET READONLY ****") ;
         DataService dSrv = action.getDataService() ;
 
 //        if ( ! dSrv.isActive() )


[07/13] jena git commit: Imporve comments.

Posted by an...@apache.org.
Imporve comments.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/33bb6a87
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/33bb6a87
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/33bb6a87

Branch: refs/heads/master
Commit: 33bb6a8732073c14be323a458df7ab4f38ab78d3
Parents: b764a94
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 17:34:01 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 17:34:01 2015 +0100

----------------------------------------------------------------------
 .../jena/fuseki/server/ServerInitialConfig.java       | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/33bb6a87/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
index d3b1966..1e42bd6 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
@@ -28,20 +28,18 @@ public class ServerInitialConfig {
     // Priority order : --conf, templated  
     // through the command line processing should not allow --conf and a templated /dataset.
     
-    // Either this ...
-    public String    argTemplateFile     = null ;           // Command list args --mem, --loc, --memtdb
+    // Either this ... command line ...
+    public String    argTemplateFile  = null ;              // Command list args --mem, --loc, --memtdb
     public String    datasetPath      = null ;              // Dataset name on the command line.
     public boolean   allowUpdate      = false ;             // Command line --update.
-    // Special case - directly pass in the dataset graphs - datasetPath must be given.
-    public DatasetGraph dsg           = null ;              // Command line --file.
+    // Special case - prebuilt dataset.  Uses datasetPath.
+    public DatasetGraph dsg           = null ;             // Embedded or command line --file)
     
-    // Or this ... 
+    // Or configuration file from command line 
     public String    fusekiCmdLineConfigFile = null ;       // Command line --conf.
-    // Or this ... (lowest priority)
+    // Or configuration from run area (lowest priority)
     public String    fusekiServerConfigFile = null ;        // "run" area
     
-    
     // Additional information.
     public Map<String,String> params  = new HashMap<>() ;
-    
 }


[03/13] jena git commit: Reformat

Posted by an...@apache.org.
Reformat

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/85602bcb
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/85602bcb
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/85602bcb

Branch: refs/heads/master
Commit: 85602bcbf590a73a140158d8547e9836af87534a
Parents: f42d76d
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 12:54:38 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 12:54:38 2015 +0100

----------------------------------------------------------------------
 .../apache/jena/fuseki/TestSPARQLProtocol.java  | 111 +++++++++----------
 1 file changed, 55 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/85602bcb/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestSPARQLProtocol.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestSPARQLProtocol.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestSPARQLProtocol.java
index cffc8c4..bd53495 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestSPARQLProtocol.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestSPARQLProtocol.java
@@ -18,73 +18,72 @@
 
 package org.apache.jena.fuseki;
 
-import static org.apache.jena.fuseki.ServerTest.* ;
-import org.apache.jena.atlas.junit.BaseTest ;
-import org.apache.jena.query.* ;
-import org.apache.jena.riot.WebContent ;
-import org.apache.jena.sparql.engine.http.QueryEngineHTTP ;
-import org.apache.jena.sparql.util.Convert ;
-import org.apache.jena.update.UpdateExecutionFactory ;
-import org.apache.jena.update.UpdateFactory ;
-import org.apache.jena.update.UpdateProcessor ;
-import org.apache.jena.update.UpdateRequest ;
-import org.junit.AfterClass ;
-import org.junit.BeforeClass ;
-import org.junit.Test ;
+import static org.apache.jena.fuseki.ServerTest.*;
+import org.apache.jena.atlas.junit.BaseTest;
+import org.apache.jena.query.*;
+import org.apache.jena.riot.WebContent;
+import org.apache.jena.sparql.engine.http.QueryEngineHTTP;
+import org.apache.jena.sparql.util.Convert;
+import org.apache.jena.update.UpdateExecutionFactory;
+import org.apache.jena.update.UpdateFactory;
+import org.apache.jena.update.UpdateProcessor;
+import org.apache.jena.update.UpdateRequest;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 public class TestSPARQLProtocol extends BaseTest
 {
-    @BeforeClass public static void beforeClass()
-    {
-        ServerTest.allocServer() ;
-        ServerTest.resetServer() ;
+    @BeforeClass
+    public static void beforeClass() {
+        ServerTest.allocServer();
+        ServerTest.resetServer();
         // Load some data.
-        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
-        du.putModel(model1) ;
-        du.putModel(gn1, model2) ;
+        DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST);
+        du.putModel(model1);
+        du.putModel(gn1, model2);
     }
-    
-    @AfterClass public static void afterClass()
-    {
-        ServerTest.resetServer() ;
-        ServerTest.freeServer() ;
+
+    @AfterClass
+    public static void afterClass() {
+        ServerTest.resetServer();
+        ServerTest.freeServer();
     }
-    
-    static String query(String base, String queryString)
-    {
-        return base+"?query="+Convert.encWWWForm(queryString) ;
+
+    static String query(String base, String queryString) {
+        return base + "?query=" + Convert.encWWWForm(queryString);
     }
-    
-    @Test public void query_01()
-    {
-        Query query = QueryFactory.create("SELECT * { ?s ?p ?o }") ;
-        QueryExecution qexec = QueryExecutionFactory.sparqlService(serviceQuery, query) ;
-        ResultSet rs = qexec.execSelect() ;
-        int x = ResultSetFormatter.consume(rs) ;
-        assertTrue( x != 0 ) ;
+
+    @Test
+    public void query_01() {
+        Query query = QueryFactory.create("SELECT * { ?s ?p ?o }");
+        QueryExecution qexec = QueryExecutionFactory.sparqlService(serviceQuery, query);
+        ResultSet rs = qexec.execSelect();
+        int x = ResultSetFormatter.consume(rs);
+        assertTrue(x != 0);
     }
 
-    @Test public void query_02()
-    {
-        Query query = QueryFactory.create("SELECT * { ?s ?p ?o }") ;
-        QueryEngineHTTP engine = QueryExecutionFactory.createServiceRequest(serviceQuery, query) ;
-        engine.setSelectContentType(WebContent.contentTypeResultsJSON) ;
-        ResultSet rs = engine.execSelect() ;
-        int x = ResultSetFormatter.consume(rs) ;
-        assertTrue( x != 0 ) ;
+    @Test
+    public void query_02() {
+        Query query = QueryFactory.create("SELECT * { ?s ?p ?o }");
+        QueryEngineHTTP engine = QueryExecutionFactory.createServiceRequest(serviceQuery, query);
+        engine.setSelectContentType(WebContent.contentTypeResultsJSON);
+        ResultSet rs = engine.execSelect();
+        int x = ResultSetFormatter.consume(rs);
+        assertTrue(x != 0);
     }
 
-    @Test public void update_01()
-    {
-        UpdateRequest update = UpdateFactory.create("INSERT DATA {}") ;
-        UpdateProcessor proc = UpdateExecutionFactory.createRemote(update, serviceUpdate) ;
-        proc.execute() ;
+    @Test
+    public void update_01() {
+        UpdateRequest update = UpdateFactory.create("INSERT DATA {}");
+        UpdateProcessor proc = UpdateExecutionFactory.createRemote(update, serviceUpdate);
+        proc.execute();
     }
-    
-    @Test public void update_02()
-    {
-        UpdateRequest update = UpdateFactory.create("INSERT DATA {}") ;
-        UpdateProcessor proc = UpdateExecutionFactory.createRemoteForm(update, serviceUpdate) ;
-        proc.execute() ;
+
+    @Test
+    public void update_02() {
+        UpdateRequest update = UpdateFactory.create("INSERT DATA {}");
+        UpdateProcessor proc = UpdateExecutionFactory.createRemoteForm(update, serviceUpdate);
+        proc.execute();
     }
 }


[10/13] jena git commit: JENA-1055: Rationalize method checking handling especially OPTIONS.

Posted by an...@apache.org.
JENA-1055: Rationalize method checking handling especially OPTIONS.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/d61d1ca2
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/d61d1ca2
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/d61d1ca2

Branch: refs/heads/master
Commit: d61d1ca27af8023b59bfb4664a88b245e8e17e83
Parents: e9ef60b
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 19:50:18 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 19:50:18 2015 +0100

----------------------------------------------------------------------
 .../org/apache/jena/fuseki/build/Builder.java   |  20 +--
 .../apache/jena/fuseki/build/FusekiConfig.java  |   1 +
 .../org/apache/jena/fuseki/mgt/ActionStats.java |   2 +-
 .../apache/jena/fuseki/servlets/REST_Quads.java |  10 +-
 .../jena/fuseki/servlets/REST_Quads_R.java      |  13 +-
 .../jena/fuseki/servlets/REST_Quads_RW.java     |  14 +-
 .../jena/fuseki/servlets/SPARQL_GSP_R.java      |   8 +-
 .../fuseki/servlets/SPARQL_UberServlet.java     |  67 +++++-----
 .../apache/jena/fuseki/servlets/ServletOps.java |   2 +
 .../java/org/apache/jena/fuseki/TS_Fuseki.java  |   2 +
 .../org/apache/jena/fuseki/TestHttpOptions.java |  61 +++++++++
 .../apache/jena/fuseki/TestServerReadOnly.java  | 134 +++++++++++++++++++
 12 files changed, 275 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/Builder.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/Builder.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/Builder.java
index 77297c7..9b15ec1 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/Builder.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/Builder.java
@@ -44,8 +44,9 @@ public class Builder
 {
     private static Logger log = Fuseki.builderLog ;
     
-    /** Build a DataAccessPoint, including DataServiceat Resource svc */
+    /** Build a DataAccessPoint, including DataService at Resource svc */ 
     public static DataAccessPoint buildDataAccessPoint(Resource svc) {
+        // XXX
         RDFNode n = FusekiLib.getOne(svc, "fu:name") ;
         if ( ! n.isLiteral() )
             throw new FusekiConfigException("Not a literal for access point name: "+FmtUtils.stringForRDFNode(n));
@@ -63,7 +64,7 @@ public class Builder
     }
 
     /** Build a DatasetRef starting at Resource svc */
-    public static DataService buildDataService(Resource svc) {
+    private static DataService buildDataService(Resource svc) {
         //log.debug("Service: " + nodeLabel(svc)) ;
         // DO REAL WORK
         Resource datasetDesc = ((Resource)getOne(svc, "fu:dataset")) ;
@@ -78,12 +79,12 @@ public class Builder
         addServiceEP(dataService, OperationName.Update, svc,    "fu:serviceUpdate") ;
         addServiceEP(dataService, OperationName.Upload, svc,    "fu:serviceUpload") ;
         addServiceEP(dataService, OperationName.GSP_R,  svc,    "fu:serviceReadGraphStore") ;
-        addServiceEP(dataService, OperationName.GSP,    svc,    "fu:serviceReadWriteGraphStore") ;
+        addServiceEP(dataService, OperationName.GSP_RW, svc,    "fu:serviceReadWriteGraphStore") ;
         
-        if ( ! dataService.getOperation(OperationName.GSP).isEmpty() )
-            dataService.addEndpoint(OperationName.Quads, "") ;
+        if ( ! dataService.getOperation(OperationName.GSP_RW).isEmpty() )
+            dataService.addEndpoint(OperationName.Quads_RW, "") ;
         else if ( ! dataService.getOperation(OperationName.GSP_R).isEmpty() )
-            dataService.addEndpoint(OperationName.Quads, "") ;
+            dataService.addEndpoint(OperationName.Quads_R, "") ;
         
         // XXX 
 //        // Extract timeout overriding configuration if present.
@@ -103,14 +104,15 @@ public class Builder
         addServiceEP(dataService, OperationName.Query, "query") ;
         addServiceEP(dataService, OperationName.Query, "sparql") ;
         if ( ! allowUpdate ) {
-            addServiceEP(dataService, OperationName.Quads, "quads") ;
             addServiceEP(dataService, OperationName.GSP_R, "data") ;
+            addServiceEP(dataService, OperationName.Quads_R, "") ;
             return dataService ;
         }
-        addServiceEP(dataService, OperationName.GSP,    "data") ;
+        addServiceEP(dataService, OperationName.GSP_RW,    "data") ;
+        addServiceEP(dataService, OperationName.GSP_R,  "get") ;
         addServiceEP(dataService, OperationName.Update, "update") ;
         addServiceEP(dataService, OperationName.Upload, "upload") ;
-        addServiceEP(dataService, OperationName.Quads,  "") ;
+        addServiceEP(dataService, OperationName.Quads_RW,  "") ;
         return dataService ;
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
index 8bfa469..8bd4afd 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/build/FusekiConfig.java
@@ -245,6 +245,7 @@ public class FusekiConfig {
         }
 
         Resource service = services.get(0) ;
+        // Configuration file determines read-only status.
         DataAccessPoint acc = Builder.buildDataAccessPoint(service) ; 
         return acc ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
index 4e9a082..24e1c5b 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
@@ -187,7 +187,7 @@ public class ActionStats extends ActionContainerItem
     }
     
     private long gspValue(DataService dSrv, CounterName cn) {
-        return  counter(dSrv, OperationName.GSP, cn) +
+        return  counter(dSrv, OperationName.GSP_RW, cn) +
                 counter(dSrv, OperationName.GSP_R, cn) ;
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java
index 578447e..8fb1a7d 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java
@@ -24,19 +24,13 @@ package org.apache.jena.fuseki.servlets ;
  * dataset URI.
  */
 
-public abstract class REST_Quads extends SPARQL_GSP {
-    // Not supported: GSP direct naming.
-
+public abstract class REST_Quads extends SPARQL_GSP
+{
     public REST_Quads() {
         super() ;
     }
 
     @Override
-    protected void validate(HttpAction action) {
-        // Check in the operations itself.
-    }
-
-    @Override
     protected void doOptions(HttpAction action) {
         ServletOps.errorMethodNotAllowed("OPTIONS") ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_R.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_R.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_R.java
index a8ce180..73e2715 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_R.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_R.java
@@ -41,7 +41,18 @@ public class REST_Quads_R extends REST_Quads {
     }
 
     @Override
-    protected void validate(HttpAction action) { }
+    protected void validate(HttpAction action) { 
+        // Allowed methods controlled by ActionREST.dispatch
+        String method = action.getRequest().getMethod() ;
+        switch(method) {
+            case HttpNames.METHOD_GET:
+            case HttpNames.METHOD_HEAD:
+            case HttpNames.METHOD_OPTIONS:
+                break ;
+            default:
+                ServletOps.errorMethodNotAllowed(method+" : Read-only dataset");
+        }
+    }
 
     @Override
     protected void doGet(HttpAction action) {

http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java
index 80b1b8a..c845d7b 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java
@@ -22,6 +22,7 @@ import org.apache.jena.fuseki.FusekiLib ;
 import org.apache.jena.riot.RiotException ;
 import org.apache.jena.riot.system.StreamRDF ;
 import org.apache.jena.riot.system.StreamRDFLib ;
+import org.apache.jena.riot.web.HttpNames ;
 import org.apache.jena.sparql.core.DatasetGraph ;
 import org.apache.jena.sparql.core.DatasetGraphFactory ;
 
@@ -37,8 +38,17 @@ public class REST_Quads_RW extends REST_Quads_R {
     }
 
     @Override
-    protected void validate(HttpAction action) { }
-
+    protected void validate(HttpAction action) { 
+    }
+    
+    @Override
+    protected void doOptions(HttpAction action) {
+        setCommonHeadersForOptions(action.response) ;
+        action.response.setHeader(HttpNames.hAllow, "GET,HEAD,OPTIONS,PUT,POST");
+        action.response.setHeader(HttpNames.hContentLengh, "0") ;
+        ServletOps.success(action) ;
+    }
+    
     @Override
     protected void doPost(HttpAction action) {
         if ( !action.getDataService().allowUpdate() )

http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java
index f35e582..54d04d5 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java
@@ -106,17 +106,17 @@ public class SPARQL_GSP_R extends SPARQL_GSP
 
     @Override
     protected void doPost(HttpAction action)
-    { ServletOps.errorMethodNotAllowed("POST") ; }
+    { ServletOps.errorMethodNotAllowed("POST : Read-only") ; }
 
     @Override
     protected void doDelete(HttpAction action)
-    { ServletOps.errorMethodNotAllowed("DELETE") ; }
+    { ServletOps.errorMethodNotAllowed("DELETE : Read-only") ; }
 
     @Override
     protected void doPut(HttpAction action)
-    { ServletOps.errorMethodNotAllowed("PUT") ; }
+    { ServletOps.errorMethodNotAllowed("PUT : Read-only") ; }
 
     @Override
     protected void doPatch(HttpAction action)
-    { ServletOps.errorMethodNotAllowed("PATCH") ; }
+    { ServletOps.errorMethodNotAllowed("PATCH : Read-only") ; }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
index f64e7c3..1a49956 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
@@ -22,8 +22,10 @@ import static java.lang.String.format ;
 import static org.apache.jena.riot.WebContent.contentTypeSPARQLQuery ;
 import static org.apache.jena.riot.WebContent.contentTypeSPARQLUpdate ;
 
+import java.io.IOException ;
 import java.util.List ;
 
+import javax.servlet.ServletException ;
 import javax.servlet.http.HttpServletRequest ;
 import javax.servlet.http.HttpServletResponse ;
 
@@ -80,11 +82,10 @@ public abstract class SPARQL_UberServlet extends ActionSPARQL
         public AccessByConfig()    { super() ; }
         @Override protected boolean allowQuery(HttpAction action)    { return isEnabled(action, OperationName.Query) ; }
         @Override protected boolean allowUpdate(HttpAction action)   { return isEnabled(action, OperationName.Update) ; }
-        @Override protected boolean allowREST_R(HttpAction action)   { return isEnabled(action, OperationName.GSP_R) || isEnabled(action, OperationName.GSP) ; }
-        @Override protected boolean allowREST_W(HttpAction action)   { return isEnabled(action, OperationName.GSP) ; }
-        // Quad operations tied to presence/absence of GSP.
-        @Override protected boolean allowQuadsR(HttpAction action)   { return isEnabled(action, OperationName.GSP_R) || isEnabled(action, OperationName.GSP) ; }
-        @Override protected boolean allowQuadsW(HttpAction action)   { return isEnabled(action, OperationName.GSP) ; }
+        @Override protected boolean allowREST_R(HttpAction action)   { return isEnabled(action, OperationName.GSP_R) || isEnabled(action, OperationName.GSP_RW) ; }
+        @Override protected boolean allowREST_W(HttpAction action)   { return isEnabled(action, OperationName.GSP_RW) ; }
+        @Override protected boolean allowQuadsR(HttpAction action)   { return isEnabled(action, OperationName.Quads_R) || isEnabled(action, OperationName.Quads_RW) ; }
+        @Override protected boolean allowQuadsW(HttpAction action)   { return isEnabled(action, OperationName.Quads_RW) ; }
 
         // Test whether there is a configuration that allows this action as the operation given.
         // Ignores the operation in the action (set due to parsing - it might be "quads"
@@ -109,7 +110,7 @@ public abstract class SPARQL_UberServlet extends ActionSPARQL
     private final ActionSPARQL uploadServlet   = new SPARQL_Upload() ;
     private final ActionSPARQL gspServlet_R    = new SPARQL_GSP_R() ;
     private final ActionSPARQL gspServlet_RW   = new SPARQL_GSP_RW() ;
-    private final ActionSPARQL restQuads_R     = new REST_Quads_R() ;
+    private final ActionSPARQL restQuads_R     = new REST_Quads_R() ; // XXX
     private final ActionSPARQL restQuads_RW    = new REST_Quads_RW() ;
     
     public SPARQL_UberServlet() { super(); }
@@ -151,6 +152,7 @@ public abstract class SPARQL_UberServlet extends ActionSPARQL
         String method = request.getMethod() ;
         
         DataAccessPoint desc = action.getDataAccessPoint() ;
+        System.err.println("**** SET READONLY ****") ;
         DataService dSrv = action.getDataService() ;
 
 //        if ( ! dSrv.isActive() )
@@ -184,15 +186,6 @@ public abstract class SPARQL_UberServlet extends ActionSPARQL
         boolean hasTrailing = ( trailing.length() != 0 ) ;
         
         if ( !hasTrailing && !hasParams ) {
-            // REST quads operations.
-//            if ( serviceDispatch(action, OperationName.GSP_R, restQuads_R) ) return ;
-//            if ( serviceDispatch(action, OperationName.GSP, restQuads_RW) ) return ;
-            
-//            boolean isPOST = method.equals(HttpNames.METHOD_POST) ;
-//            if ( isPOST ) {
-//                // Differentiate SPARQL query, SPARQL update by content type.
-//            }
-            
             // REST dataset.
             boolean isGET = method.equals(HttpNames.METHOD_GET) ;
             boolean isHEAD = method.equals(HttpNames.METHOD_HEAD) ;
@@ -202,13 +195,16 @@ public abstract class SPARQL_UberServlet extends ActionSPARQL
                 if ( allowREST_R(action) )
                     restQuads_R.executeLifecycle(action) ;
                 else
-                    ServletOps.errorForbidden("Forbidden: "+method+" on dataset") ;
+                    ServletOps.errorMethodNotAllowed("Read-only dataset : "+method) ;
                 return ; 
             }
+            // If the read-only server has the same name as the writable server, 
+            // and the default fro a read-only server is "/data", like a writable dataset,
+            // this test is insufficient.
             if ( allowREST_W(action) )
                 restQuads_RW.executeLifecycle(action) ;
             else
-                ServletOps.errorForbidden("Forbidden: "+method+" on dataset") ;
+                ServletOps.errorMethodNotAllowed("Read-only dataset : "+method) ;
             return ;
         }
         
@@ -221,7 +217,7 @@ public abstract class SPARQL_UberServlet extends ActionSPARQL
             if ( hasParamQuery || ( isPOST && contentTypeSPARQLQuery.equalsIgnoreCase(ct) ) ) {
                 // SPARQL Query
                 if ( !allowQuery(action) )
-                    ServletOps.errorForbidden("Forbidden: SPARQL query") ;
+                    ServletOps.errorMethodNotAllowed("SPARQL query : "+method) ;
                 executeRequest(action, queryServlet) ;
                 return ;
             }
@@ -231,7 +227,7 @@ public abstract class SPARQL_UberServlet extends ActionSPARQL
             if ( isPOST && ( hasParamUpdate || contentTypeSPARQLUpdate.equalsIgnoreCase(ct) ) ) {
                 // SPARQL Update
                 if ( !allowUpdate(action) )
-                    ServletOps.errorForbidden("Forbidden: SPARQL update") ;
+                    ServletOps.errorMethodNotAllowed("SPARQL update : "+method) ; 
                 executeRequest(action, updateServlet) ;
                 return ;
             }
@@ -243,7 +239,7 @@ public abstract class SPARQL_UberServlet extends ActionSPARQL
             }
             
             ServletOps.errorBadRequest("Malformed request") ;
-            ServletOps.errorForbidden("Forbidden: SPARQL Graph Store Protocol : Read operation : "+method) ;
+            ServletOps.errorMethodNotAllowed("SPARQL Graph Store Protocol : "+method) ;
         }
         
         final boolean checkForPossibleService = true ;
@@ -256,11 +252,11 @@ public abstract class SPARQL_UberServlet extends ActionSPARQL
             if ( serviceDispatch(action, OperationName.Upload, uploadServlet) ) return ;
             if ( hasParams ) {
                 if ( serviceDispatch(action, OperationName.GSP_R, gspServlet_R) ) return ; 
-                if ( serviceDispatch(action, OperationName.GSP, gspServlet_RW) ) return ;
+                if ( serviceDispatch(action, OperationName.GSP_RW, gspServlet_RW) ) return ;
             } else {
                 // No parameters - do as a quads operation on the dataset.
                 if ( serviceDispatch(action, OperationName.GSP_R, restQuads_R) ) return ;
-                if ( serviceDispatch(action, OperationName.GSP, restQuads_RW) ) return ;
+                if ( serviceDispatch(action, OperationName.GSP_RW, restQuads_RW) ) return ;
             }
         }
         // There is a trailing part - params are illegal by this point.
@@ -331,18 +327,21 @@ public abstract class SPARQL_UberServlet extends ActionSPARQL
     }
 
     private void executeRequest(HttpAction action, ActionSPARQL servlet) {
-        servlet.executeLifecycle(action) ;
-        // A call to "doCommon" or a forwarded dispatch looses "action".
-//      try
-//      {
-//          String target = getEPName(desc.name, endpointList) ;
-//          if ( target == null )
-//              errorMethodNotAllowed(request.getMethod()) ;
-//          // ** relative servlet forward
-//          request.getRequestDispatcher(target).forward(request, response) ;    
-//          // ** absolute srvlet forward
-//          // getServletContext().getRequestDispatcher(target) ;
-//      } catch (Exception e) { errorOccurred(e) ; }        
+        if ( true ) {
+            // Execute an ActionSPARQL.
+            // Bypasses HttpServlet.service to doMethod dispatch.
+            servlet.executeLifecycle(action) ;
+            return ;
+        }
+        if ( false )  {
+            // Execute by calling the whole servlet mechanism.
+            // This causes HttpServlet.service to call the appropriate doMethod. 
+            // but the action, and the id, are not passed on and a ne one is created.
+            try { servlet.service(action.request, action.response) ; }
+            catch (ServletException | IOException e) {
+                ServletOps.errorOccurred(e); 
+            }
+        }
     }
 
     protected static MediaType contentNegotationQuads(HttpAction action) {

http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ServletOps.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ServletOps.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ServletOps.java
index 277bf47..b250250 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ServletOps.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ServletOps.java
@@ -154,6 +154,8 @@ public class ServletOps {
     }
 
     public static String formatForLog(String string) {
+        if ( string == null )
+            return "<null>" ;
         string = string.replace('\n', ' ') ;
         string = string.replace('\r', ' ') ;
         return string ;

http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TS_Fuseki.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TS_Fuseki.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TS_Fuseki.java
index 8806968..b8f6e9e 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TS_Fuseki.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TS_Fuseki.java
@@ -33,6 +33,7 @@ import org.junit.runners.Suite ;
 @Suite.SuiteClasses( {
     TestHttpOp.class
     , TestSPARQLProtocol.class
+    , TestHttpOptions.class
     , TestDatasetGraphAccessorHTTP.class
     , TestDatasetAccessorHTTP.class
     , TestQuery.class
@@ -40,6 +41,7 @@ import org.junit.runners.Suite ;
     , TestDatasetOps.class
     , TestFileUpload.class
     , TestAdmin.class
+    , TestServerReadOnly.class
 })
 
 public class TS_Fuseki extends ServerTest

http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestHttpOptions.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestHttpOptions.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestHttpOptions.java
new file mode 100644
index 0000000..8f26d1a
--- /dev/null
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestHttpOptions.java
@@ -0,0 +1,61 @@
+/**
+ * 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;
+
+import static org.apache.jena.fuseki.ServerTest.serviceGSP ;
+import static org.apache.jena.fuseki.ServerTest.serviceQuery ;
+import static org.apache.jena.fuseki.ServerTest.serviceUpdate ;
+import static org.apache.jena.fuseki.ServerTest.urlDataset ;
+
+import org.junit.Test ;
+
+public class TestHttpOptions extends AbstractFusekiTest
+{
+    @Test
+    public void options_query() {
+        String v = FusekiTest.execOptions(serviceQuery) ;
+        FusekiTest.assertStringList(v, "GET", "OPTIONS", "POST") ;
+    }
+    
+    @Test
+    public void options_update() {
+        String v = FusekiTest.execOptions(serviceUpdate) ;
+        FusekiTest.assertStringList(v, "OPTIONS", "POST") ;
+    }
+    
+    @Test
+    public void options_dataset_01() {
+        String v = FusekiTest.execOptions(urlDataset) ;
+        // Not DELETE
+        FusekiTest.assertStringList(v, "HEAD", "GET", "OPTIONS", "POST", "PUT") ;
+    }
+
+    @Test
+    public void options_dataset_02() {
+        //"quads"
+    }
+    
+    @Test
+    public void options_gsp_rw() {
+        String v = FusekiTest.execOptions(serviceGSP+"?default") ;
+        FusekiTest.assertStringList(v, "GET", "OPTIONS", "HEAD", "POST", "PUT", "DELETE") ;
+    }
+
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/d61d1ca2/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestServerReadOnly.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestServerReadOnly.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestServerReadOnly.java
new file mode 100644
index 0000000..8e3f98a
--- /dev/null
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestServerReadOnly.java
@@ -0,0 +1,134 @@
+/**
+ * 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;
+
+import static org.apache.jena.fuseki.ServerTest.serviceGSP ;
+import static org.apache.jena.fuseki.ServerTest.serviceQuery ;
+import static org.apache.jena.fuseki.ServerTest.serviceUpdate ;
+
+import java.nio.charset.StandardCharsets ;
+
+import org.apache.http.HttpEntity ;
+import org.apache.http.entity.StringEntity ;
+import org.apache.jena.atlas.junit.BaseTest ;
+import org.apache.jena.query.Query ;
+import org.apache.jena.query.QueryExecution ;
+import org.apache.jena.query.QueryExecutionFactory ;
+import org.apache.jena.query.QueryFactory ;
+import org.apache.jena.riot.web.HttpOp ;
+import org.apache.jena.update.UpdateExecutionFactory ;
+import org.apache.jena.update.UpdateFactory ;
+import org.apache.jena.update.UpdateProcessor ;
+import org.apache.jena.update.UpdateRequest ;
+import org.apache.jena.web.HttpSC ;
+import org.junit.AfterClass ;
+import org.junit.BeforeClass ;
+import org.junit.Test ;
+
+/** Tests on a read only server. */
+public class TestServerReadOnly extends BaseTest
+{
+    // readonly server.
+    @BeforeClass
+    public static void allocServerForSuite() {
+        ServerTest.allocServer(false) ;
+    }
+
+    @AfterClass
+    public static void freeServerForSuite() {
+        ServerTest.freeServer() ;
+    }
+    
+    @Test
+    public void query_readonly() {
+        Query query = QueryFactory.create("ASK{}");
+        QueryExecution qexec = QueryExecutionFactory.sparqlService(serviceQuery, query);
+        qexec.execAsk() ;
+    }
+    
+    @Test()
+    public void update_readonly() {
+        FusekiTest.exec404( () -> {
+            UpdateRequest update = UpdateFactory.create("INSERT DATA {}");
+            UpdateProcessor proc = UpdateExecutionFactory.createRemote(update, serviceUpdate);
+            proc.execute();
+        });
+    }
+
+    
+    @Test
+    public void gsp_w_readonly_POST() {
+        // Try to write
+        FusekiTest.execWithHttpException(HttpSC.METHOD_NOT_ALLOWED_405, ()->{
+            HttpEntity e = new StringEntity("", StandardCharsets.UTF_8) ;
+            HttpOp.execHttpPost(serviceGSP+"?default", e);
+        }) ;
+    }
+    
+    @Test
+    public void gsp_w_readonly_PUT() {
+        // Try to write
+        FusekiTest.execWithHttpException(HttpSC.METHOD_NOT_ALLOWED_405, ()->{
+            HttpEntity e = new StringEntity("", StandardCharsets.UTF_8) ;
+            HttpOp.execHttpPut(serviceGSP+"?default", e);
+        }) ;
+    }
+
+    @Test
+    public void gsp_w_readonly_DELETE() {
+        // Try to write
+        FusekiTest.execWithHttpException(HttpSC.METHOD_NOT_ALLOWED_405, ()->{
+            HttpOp.execHttpDelete(serviceGSP+"?default");
+        }) ;
+    }
+    
+    @Test
+    public void dataset_w_readonly_POST() {
+        // Try to write
+        FusekiTest.execWithHttpException(HttpSC.METHOD_NOT_ALLOWED_405, ()->{
+            HttpEntity e = new StringEntity("", StandardCharsets.UTF_8) ;
+            HttpOp.execHttpPost(ServerTest.urlDataset, e) ;
+        }) ;
+    }
+
+    @Test
+    public void dataset_w_readonly_PUT() {
+        // Try to write
+        FusekiTest.execWithHttpException(HttpSC.METHOD_NOT_ALLOWED_405, ()->{
+            HttpEntity e = new StringEntity("", StandardCharsets.UTF_8) ;
+            HttpOp.execHttpPut(ServerTest.urlDataset, e) ;
+        }) ;
+    }
+
+    @Test
+    public void dataset_w_readonly_DELETE() {
+        // Try to write
+        FusekiTest.execWithHttpException(HttpSC.METHOD_NOT_ALLOWED_405, ()->{
+            HttpOp.execHttpDelete(ServerTest.urlDataset) ;
+        }) ;
+    }
+
+    @Test
+    public void options_gsp_readonly() {
+        String v = FusekiTest.execOptions(serviceGSP+"?default") ;
+        FusekiTest.assertStringList(v, "GET", "OPTIONS", "HEAD") ;
+    }
+
+}
+


[02/13] jena git commit: Reword addHeader warning. Reformat.

Posted by an...@apache.org.
Reword addHeader warning. Reformat.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/f42d76dc
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/f42d76dc
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/f42d76dc

Branch: refs/heads/master
Commit: f42d76dcd03551213ba63696d9889d07979192d5
Parents: 70db5e1
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 10:52:41 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 10:52:41 2015 +0100

----------------------------------------------------------------------
 .../servlets/HttpServletResponseTracker.java    | 76 ++++++++++----------
 1 file changed, 36 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/f42d76dc/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java
index c39e728..ac7ce09 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/HttpServletResponseTracker.java
@@ -18,6 +18,7 @@
 
 package org.apache.jena.fuseki.servlets;
 
+import static java.lang.String.format ;
 import java.io.IOException ;
 
 import javax.servlet.http.HttpServletResponse ;
@@ -31,70 +32,65 @@ public class HttpServletResponseTracker extends HttpServletResponseWrapper
 {
     private final HttpAction action ;
 
-    public HttpServletResponseTracker(HttpAction action, HttpServletResponse response)
-    {
-        super(response) ;
-        this.action = action ;
+    public HttpServletResponseTracker(HttpAction action, HttpServletResponse response) {
+        super(response);
+        this.action = action;
     }
 
     @Override
-    public void sendError(int sc, String msg) throws IOException
-    {
-        action.statusCode = sc ;
-        action.message = msg ;
-        super.sendError(sc, msg) ;
+    public void sendError(int sc, String msg) throws IOException {
+        action.statusCode = sc;
+        action.message = msg;
+        super.sendError(sc, msg);
     }
 
     @Override
-    public void sendError(int sc) throws IOException
-    {
-        action.statusCode = sc ;
-        action.message = null ;
-        super.sendError(sc) ;
+    public void sendError(int sc) throws IOException {
+        action.statusCode = sc;
+        action.message = null;
+        super.sendError(sc);
     }
 
     @Override
-    public void setHeader(String name, String value)
-    {
-        super.setHeader(name, value) ;
-        action.headers.put(name, value) ;
+    public void setHeader(String name, String value) {
+        super.setHeader(name, value);
+        action.headers.put(name, value);
     }
 
     @Override
-    public void addHeader(String name, String value)
-    {
-        Log.warn(this, "Unexpected addHeader - not recorded in log") ;
-        super.addHeader(name, value) ;
+    public void addHeader(String name, String value) {
+        // Fuseki only uses setHeader.
+        // This is assumption checking code.
+        // (No design reason why Fuseki can't use multiple headers.) 
+        Log.warn(this, format("addHeader(%s: %s) : Expected only setHeader - header not in response", name, value));
+        super.addHeader(name, value);
     }
+
     @Override
-    public void setStatus(int sc) 
-    {
-        action.statusCode = sc ;
-        action.message = null ;
-        super.setStatus(sc) ;
+    public void setStatus(int sc) {
+        action.statusCode = sc;
+        action.message = null;
+        super.setStatus(sc);
     }
 
     @Override
     @Deprecated
-    public void setStatus(int sc, String sm)
-    {
-        action.statusCode = sc ;
-        action.message = sm ;
-        super.setStatus(sc, sm) ;
+    public void setStatus(int sc, String sm) {
+        action.statusCode = sc;
+        action.message = sm;
+        super.setStatus(sc, sm);
     }
 
     @Override
-    public void setContentLength(int len)
-    {
-        action.contentLength = len ;
-        super.setContentLength(len) ;
+    public void setContentLength(int len) {
+        action.contentLength = len;
+        super.setContentLength(len);
     }
 
     @Override
-    public void setContentType(String type)
-    {
-        action.contentType = type ;
-        super.setContentType(type) ;
+    public void setContentType(String type) {
+        action.contentType = type;
+        super.setContentType(type);
     }
       
       // From HttpServletResponse


[12/13] jena git commit: Reset

Posted by an...@apache.org.
Reset

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/dba52b9b
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/dba52b9b
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/dba52b9b

Branch: refs/heads/master
Commit: dba52b9b20c07291fe47f431c4462d34c397d918
Parents: 32e78fa
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Oct 23 20:29:57 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Oct 23 20:29:57 2015 +0100

----------------------------------------------------------------------
 .../org/apache/jena/fuseki/server/ServerInitialConfig.java  | 9 +++++++++
 1 file changed, 9 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/dba52b9b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
index 1e42bd6..d1d4f11 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/ServerInitialConfig.java
@@ -42,4 +42,13 @@ public class ServerInitialConfig {
     
     // Additional information.
     public Map<String,String> params  = new HashMap<>() ;
+    
+    public void reset() {
+        argTemplateFile  = null ;
+        datasetPath = null ;
+        allowUpdate = false ;
+        dsg = null ;
+        fusekiCmdLineConfigFile = null ;       // Command line --conf.
+        fusekiServerConfigFile = null ;    
+    }
 }