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

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

commit 7588c3896c35c257e0c9cbbb97c306de67ec70e5
Author: Andy Seaborne <[email protected]>
AuthorDate: Thu Jul 10 12:37:29 2025 +0100

    GH-3303: Deal with bad URIs as namespaces when writing RDF/XML
---
 jena-arq/src/main/java/org/apache/jena/riot/RDFFormat.java         | 2 +-
 .../java/org/apache/jena/rdfxml/xmloutput/impl/BaseXMLWriter.java  | 7 +++++++
 .../src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java   | 4 ++--
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFFormat.java 
b/jena-arq/src/main/java/org/apache/jena/riot/RDFFormat.java
index b65fe3de88..5ddcdca52b 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFFormat.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFFormat.java
@@ -271,6 +271,6 @@ public class RDFFormat {
     public String toString() {
         if ( variant == null )
             return lang.getName() ;
-        return lang.getName() + "/" + variant ;
+        return lang.getName() + "_" + variant ;
     }
 }
diff --git 
a/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/BaseXMLWriter.java
 
b/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/BaseXMLWriter.java
index 07eac7411e..045e168658 100644
--- 
a/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/BaseXMLWriter.java
+++ 
b/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/BaseXMLWriter.java
@@ -221,6 +221,13 @@ abstract public class BaseXMLWriter implements 
RDFXMLWriterI {
             String value = e.getValue();
             String already = this.getPrefixFor(value);
             if ( already == null ) {
+                try {
+                    checkURI(value);
+                } catch(IRIException ex) {
+                    // If it is a bad URI, skip don't use it.
+                    // j.N may be generated.
+                    continue;
+                }
                 this.setNsPrefix(model.getNsURIPrefix(value), value);
                 if ( writingAllModelPrefixNamespaces ) {
                     this.addNameSpace(value);
diff --git 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java
 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java
index c274db9422..099a6afea9 100644
--- 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java
+++ 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/ActionLib.java
@@ -338,7 +338,7 @@ public class ActionLib {
      * One of {@code lang} and {@code fmt} maybe null and will be calculated.
      * {@code actualContentType} maybe null in which case the standard content 
type for the syntax is used.
      */
-    private static void writeResponse(HttpAction action, 
BiConsumer<OutputStream, RDFFormat> writeAction,RDFFormat fmt, String 
actualContentType) {
+    private static void writeResponse(HttpAction action, 
BiConsumer<OutputStream, RDFFormat> writeAction, RDFFormat fmt, String 
actualContentType) {
         String ct = actualContentType;
         Lang lang = fmt.getLang();
         if ( ct == null )
@@ -356,7 +356,7 @@ public class ActionLib {
                     writeAction.accept(bout, fmt);
                     bytes = bout.toByteArray();
                 } catch (JenaException ex) {
-                    // Problems formatting.
+                    // Problems formatting in RDF/XML.
                     action.log.warn(format("[%d] Failed to produce %s: %s", 
action.id, lang.getLabel(), ex.getMessage()));
                     ServletOps.error(HttpSC.NOT_ACCEPTABLE_406);
                     return;

Reply via email to