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 2f1b28475f918257f5d39209afe12bef6d2e6cb9
Author: Andy Seaborne <[email protected]>
AuthorDate: Thu Aug 13 15:23:18 2026 +0100

    StreamManager.openEx - exception on 'not found'
---
 .../java/org/apache/jena/query/QueryFactory.java   |  6 ++----
 .../main/java/org/apache/jena/riot/RDFDataMgr.java |  4 +++-
 .../java/org/apache/jena/riot/ReadAnything.java    |  2 +-
 .../jena/riot/adapters/AdapterFileManager.java     |  2 +-
 .../org/apache/jena/riot/rowset/QueryResults.java  |  4 ++--
 .../jena/riot/system/streammgr/StreamManager.java  | 24 ++++++++++++++++++++--
 .../jena/sparql/resultset/ResultsReader.java       |  6 +++---
 7 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/query/QueryFactory.java 
b/jena-arq/src/main/java/org/apache/jena/query/QueryFactory.java
index 48aa403258..f622108f3d 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/QueryFactory.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/QueryFactory.java
@@ -206,10 +206,8 @@ public class QueryFactory {
         if ( streamManager == null )
             streamManager = StreamManager.get();
 
-        InputStream in = streamManager.open(url);
-        if ( in == null )
-            throw new NotFoundException("Not found: " + url);
-        String qStr = IO.readWholeFileAsUTF8(streamManager.open(url));
+        InputStream in = streamManager.openEx(url, ()->new 
NotFoundException("Not found: " + url));
+        String qStr = IO.readWholeFileAsUTF8(in);
         if ( baseURI == null )
             baseURI = url;
         if ( langURI == null )
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java 
b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
index 84a1a7b9e6..3ee298ce0d 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
@@ -515,6 +515,7 @@ public class RDFDataMgr
      * Performs content negotiation, including looking at file extension.
      * @param filenameOrURI
      * @return TypedInputStream
+     * @throws RiotNotFoundException
      */
     public static TypedInputStream open(String filenameOrURI)
     { return open(filenameOrURI, StreamManager.get()); }
@@ -525,9 +526,10 @@ public class RDFDataMgr
      * @param filenameOrURI
      * @param streamManager
      * @return TypedInputStream
+     * @throws RiotNotFoundException
      */
     public static TypedInputStream open(String filenameOrURI, StreamManager 
streamManager) {
-        TypedInputStream in = streamManager.open(filenameOrURI);
+        TypedInputStream in = streamManager.openEx(filenameOrURI);
         if ( in == null )
             throw new RiotNotFoundException("Not found: "+filenameOrURI);
         return in;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/ReadAnything.java 
b/jena-arq/src/main/java/org/apache/jena/riot/ReadAnything.java
index a2c6a9dfcf..540dac916e 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/ReadAnything.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/ReadAnything.java
@@ -57,7 +57,7 @@ public class ReadAnything {
     /** Read something RDF/SPARQL like */
     public static SPARQLResult read(String url, Context context) {
         Objects.requireNonNull(url);
-        TypedInputStream in = StreamManager.get(context).open(url);
+        TypedInputStream in = StreamManager.get(context).openEx(url);
         if ( in == null )
             throw new NotFoundException(url);
         ContentType ct = WebContent.determineCT(in.getContentType(), null, 
url);
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterFileManager.java 
b/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterFileManager.java
index 4338059298..7166d24149 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterFileManager.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/adapters/AdapterFileManager.java
@@ -335,7 +335,7 @@ public class AdapterFileManager implements 
org.apache.jena.util.FileManager
      */
     @Override
     public InputStream open(String filenameOrURI) {
-        return streamManager.open(filenameOrURI);
+        return streamManager.openEx(filenameOrURI);
     }
 
     /** Apply the mapping of a filename or URI */
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/rowset/QueryResults.java 
b/jena-arq/src/main/java/org/apache/jena/riot/rowset/QueryResults.java
index 06804ac9d8..0dbfee0886 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/rowset/QueryResults.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/rowset/QueryResults.java
@@ -119,7 +119,7 @@ public class QueryResults {
    /** Read a row set from a URL or filename. */
    public RowSet read(String urlOrFilename) {
        Objects.nonNull(urlOrFilename);
-       try ( TypedInputStream in = 
StreamManager.get(context).open(urlOrFilename) ) {
+       try ( TypedInputStream in = 
StreamManager.get(context).openEx(urlOrFilename)) {
            Lang lang = determinLang(in, urlOrFilename);
            return readResultSet(in.getInputStream(), lang);
        }
@@ -137,7 +137,7 @@ public class QueryResults {
    /** Read a row set or boolean from a URL or filename. */
    public QueryExecResult readAny(String urlOrFilename) {
        Objects.nonNull(urlOrFilename);
-       try ( TypedInputStream in = 
StreamManager.get(context).open(urlOrFilename) ) {
+       try ( TypedInputStream in = 
StreamManager.get(context).openEx(urlOrFilename) ) {
            Lang lang = determinLang(in, urlOrFilename);
            return readAny(in.getInputStream(), lang);
        }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/StreamManager.java
 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/StreamManager.java
index 2096ccc42a..8ea2686056 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/StreamManager.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/riot/system/streammgr/StreamManager.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.jena.atlas.lib.Creator;
 import org.apache.jena.atlas.lib.Lib;
 import org.apache.jena.atlas.web.TypedInputStream;
 import org.apache.jena.riot.RiotNotFoundException;
@@ -123,10 +124,10 @@ public class StreamManager {
     }
 
     /**
-     * Open a file using the locators of this StreamManager.
+     * Open a file or URL using the locators of this StreamManager.
      * Returns null if not found.
      */
-    public TypedInputStream open(String filenameOrURI) {
+    public TypedInputStream openOrNull(String filenameOrURI) {
         if ( log.isDebugEnabled() )
             log.debug("open(" + filenameOrURI + ")");
 
@@ -138,6 +139,25 @@ public class StreamManager {
         return openNoMapOrNull(uri);
     }
 
+    /**
+     * Open a file or URL using the locators of this StreamManager.
+     * Call an exception provider if the file or URI  is not found.
+     */
+    public TypedInputStream openEx(String filenameOrURI, Creator<? extends 
RuntimeException> handlerCreator) {
+        TypedInputStream input = openOrNull(filenameOrURI);
+        if ( input == null )
+            throw handlerCreator.create();
+        return input ;
+    }
+
+    /**
+     * Open a file or URL using the locators of this StreamManager.
+     * Throw {@link RiotNotFoundException} if the file or URI is not found.
+     */
+    public TypedInputStream openEx(String filenameOrURI) {
+        return openEx(filenameOrURI, ()->new RiotNotFoundException("Not found: 
"+filenameOrURI));
+    }
+
     /** Test whether a mapping exists */
     public boolean hasMapping(String filenameOrURI) {
         return mapper.containsMapping(filenameOrURI);
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsReader.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsReader.java
index 9622f0bb49..3677fa6ec6 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsReader.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/resultset/ResultsReader.java
@@ -134,7 +134,7 @@ public class ResultsReader {
     /** Read a result set from a URL or filename. */
     public ResultSet read(String urlOrFilename) {
         Objects.nonNull(urlOrFilename);
-        try ( TypedInputStream in = 
StreamManager.get(context).open(urlOrFilename) ) {
+        try ( TypedInputStream in = 
StreamManager.get(context).openEx(urlOrFilename) ) {
             Lang lang = determinLang(in, urlOrFilename);
             return readResults(in, lang).getResultSet();
         }
@@ -152,7 +152,7 @@ public class ResultsReader {
     /** Read a result set from a URL or filename. */
     public RowSet readRowSet(String urlOrFilename) {
         Objects.nonNull(urlOrFilename);
-        try ( TypedInputStream in = 
StreamManager.get(context).open(urlOrFilename) ) {
+        try ( TypedInputStream in = 
StreamManager.get(context).openEx(urlOrFilename) ) {
             Lang lang = determinLang(in, urlOrFilename);
             return readAny(in.getInputStream(), lang).rowSet();
         }
@@ -170,7 +170,7 @@ public class ResultsReader {
     /** Read a result set or boolean from a URL or filename. */
     public SPARQLResult readAny(String urlOrFilename) {
         Objects.nonNull(urlOrFilename);
-        try ( TypedInputStream in = 
StreamManager.get(context).open(urlOrFilename) ) {
+        try ( TypedInputStream in = 
StreamManager.get(context).openEx(urlOrFilename) ) {
             Lang lang = determinLang(in, urlOrFilename);
             return readResults(in.getInputStream(), lang);
         }

Reply via email to