This is an automated email from the ASF dual-hosted git repository.

afs pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 286a68955d54651f93fa8aaee195b064ef0379c3
Author: Andy Seaborne <[email protected]>
AuthorDate: Wed Oct 7 09:32:39 2026 +0100

    GH-4292: GSP - Correctly determine graph existence
---
 .../apache/jena/fuseki/servlets/GraphTarget.java   | 27 +++++-----
 .../jena/sparql/exec/http/TS_SparqlExecHttp.java   |  1 +
 .../org/apache/jena/sparql/exec/http/TestGSP.java  |  1 -
 .../org/apache/jena/sparql/exec/http/TestGSP2.java | 63 ++++++++++++++++++++++
 .../jena/sparql/exec/http/TestModelStore2.java     |  2 +-
 5 files changed, 79 insertions(+), 15 deletions(-)

diff --git 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/GraphTarget.java
 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/GraphTarget.java
index 9effce1f5b..fc7e20f27a 100644
--- 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/GraphTarget.java
+++ 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/GraphTarget.java
@@ -77,21 +77,21 @@ public class GraphTarget {
                 ServletOps.errorBadRequest("Direct name does not have the 
dataset name as a prefix: "+requestURI);
 
             Node gn = NodeFactory.createURI(directName);
-            return createNamed(dsg, gn);
+            return createTargetNamed(dsg, gn);
         }
 
         if ( dftGraph )
-            return createDefault(dsg);
+            return createTargetDefault(dsg);
         // Named graph as default
         if ( uri.equals(HttpNames.graphTargetDefault) )
             // But "named" default
-            return createDefault(dsg);
+            return createTargetDefault(dsg);
         // Named graph - union
         if ( uri.equals(HttpNames.graphTargetUnion) )
-            return createUnion(dsg);
+            return createTargetUnion(dsg);
         // This logs bad URIs.
         String absUri = resolve0(uri, action);
-        return createNamed(dsg, absUri);
+        return createTargetNamed(dsg, absUri);
     }
 
     // Resolving a relative URI in ?graph= is a bit murky.
@@ -157,19 +157,19 @@ public class GraphTarget {
     final private DatasetGraph dsg;
     final private Node         graphName;
 
-    static GraphTarget createNamed(DatasetGraph dsg, String graphName) {
-        return createNamed(dsg, NodeFactory.createURI(graphName));
+    static GraphTarget createTargetNamed(DatasetGraph dsg, String graphName) {
+        return createTargetNamed(dsg, NodeFactory.createURI(graphName));
     }
 
-    static GraphTarget createNamed(DatasetGraph dsg, Node graphName) {
+    static GraphTarget createTargetNamed(DatasetGraph dsg, Node graphName) {
         return new GraphTarget(false, false, dsg, graphName);
     }
 
-    static GraphTarget createDefault(DatasetGraph dsg) {
+    static GraphTarget createTargetDefault(DatasetGraph dsg) {
         return new GraphTarget(true, false, dsg, null);
     }
 
-    static GraphTarget createUnion(DatasetGraph dsg) {
+    static GraphTarget createTargetUnion(DatasetGraph dsg) {
         return new GraphTarget(false, true, dsg, null);
     }
 
@@ -211,7 +211,7 @@ public class GraphTarget {
     public Node graphName()       { return graphName; }
 
     /**
-     * Get a graph for the action -  this is not a test for graph existence.
+     * Get a graph for the action - this is not a test for graph existence.
      * May return null or an empty graph.
      */
     public Graph graph() {
@@ -225,8 +225,9 @@ public class GraphTarget {
     public boolean exists() {
         if ( isDefault || isUnion )
             return true;
-        Graph g = graph();
-        return g != null && ! g.isEmpty();
+        return dsg.containsGraph(graphName);
+//        Graph g = graph();
+//        return g != null && ! g.isEmpty();
     }
 
     public String label() {
diff --git 
a/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TS_SparqlExecHttp.java
 
b/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TS_SparqlExecHttp.java
index fa19024e83..ff83e12919 100644
--- 
a/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TS_SparqlExecHttp.java
+++ 
b/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TS_SparqlExecHttp.java
@@ -27,6 +27,7 @@ import org.junit.platform.suite.api.Suite;
 @Suite
 @SelectClasses({
     TestGSP.class
+    , TestGSP2.class
     , TestDSP.class
     , TestGSPDirect.class
     , TestModelStore.class
diff --git 
a/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestGSP.java
 
b/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestGSP.java
index dd2331c7f1..7b7db060d8 100644
--- 
a/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestGSP.java
+++ 
b/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestGSP.java
@@ -72,7 +72,6 @@ public class TestGSP {
             server.stop();
     }
 
-
     private String url(String path) {
         return server.datasetURL(path);
     }
diff --git 
a/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestGSP2.java
 
b/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestGSP2.java
new file mode 100644
index 0000000000..8bb525f034
--- /dev/null
+++ 
b/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestGSP2.java
@@ -0,0 +1,63 @@
+/*
+ * 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
+ *
+ *   https://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.
+ *
+ *   SPDX-License-Identifier: Apache-2.0
+ */
+
+package org.apache.jena.sparql.exec.http;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+import org.junit.jupiter.api.Test;
+
+import org.apache.jena.fuseki.main.FusekiServer;
+import org.apache.jena.fuseki.main.FusekiTestLib;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.NodeFactory;
+import org.apache.jena.sparql.core.DatasetGraph;
+import org.apache.jena.sparql.core.DatasetGraphFactory;
+import org.apache.jena.sparql.exec.QueryExec;
+import org.apache.jena.sparql.exec.RowSet;
+
+/** GSP tests with specific server setup */
+public class TestGSP2 {
+    @Test public void gsp_config_general_dataset() {
+        // Issue GH-4292
+        // DatasetGraphMapLink
+        DatasetGraph dsg = DatasetGraphFactory.createGeneral();
+        FusekiServer server = FusekiServer.create().port(0).add("/ds", 
dsg).build();
+        server.start();
+        String URL = server.datasetURL("/ds");
+        Node gn = NodeFactory.createURI("urn:ns:missing");
+        try {
+            // Expect 404
+            FusekiTestLib.expect404(()->
+                GSP.service(URL+"/data").graphName(gn).DELETE()
+                );
+            // GET 400
+            //GSP.service(URL+"/data").graphName(gn).GET();
+
+            QueryExec qExec = QueryExecHTTP.service(URL).query("SELECT * { 
GRAPH ?g { } }").build();
+            RowSet rowSet = qExec.select();
+            // No named graphs expected
+            assertFalse(rowSet.hasNext(), "No named graphs expected");
+        } finally {
+            server.stop();
+        }
+    }
+}
diff --git 
a/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestModelStore2.java
 
b/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestModelStore2.java
index 24f9a1501b..f00b845f9d 100644
--- 
a/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestModelStore2.java
+++ 
b/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestModelStore2.java
@@ -44,7 +44,7 @@ import org.apache.jena.riot.WebContent;
 import org.apache.jena.sparql.sse.SSE;
 import org.apache.jena.test.conn.EnvTest;
 
-// From TestModelStore - these tests are ones that occassionaly fail.
+// From TestModelStore - these tests are ones that occasional fail.
 public class TestModelStore2 {
 
     static String DIR = "testing/RDFLink/";

Reply via email to