svn commit: r1903877 - in /xmlgraphics/fop/trunk/fop-core/src: main/java/org/apache/fop/apps/io/InternalResourceResolver.java test/java/org/apache/fop/apps/io/URIResolverWrapperTestCase.java

[email protected] Mon, 05 Sep 2022 08:54:26 -0000
Newsgroups gmane.text.xml.fop.cvs
Message-ID <[email protected]>
Author: ssteiner
Date: Mon Sep  5 08:54:25 2022
New Revision: 1903877

URL: http://svn.apache.org/viewvc?rev=1903877&view=rev
Log:
FOP-2861: Allow resource loading from jar

Modified:
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/apps/io/InternalResourceResolver.java
    xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/apps/io/URIResolverWrapperTestCase.java

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/apps/io/InternalResourceResolver.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/apps/io/InternalResourceResolver.java?rev=1903877&r1=1903876&r2=1903877&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/apps/io/InternalResourceResolver.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/apps/io/InternalResourceResolver.java Mon Sep  5 08:54:25 2022
@@ -22,8 +22,10 @@ package org.apache.fop.apps.io;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URL;
 
 import javax.xml.transform.Source;
 import javax.xml.transform.TransformerException;
@@ -110,7 +112,11 @@ public class InternalResourceResolver {
      * @return the resolved URI
      */
     public URI resolveFromBase(URI uri) {
-        return baseUri.resolve(uri);
+        try {
+            return new URL(baseUri.toURL(), uri.toString()).toURI();
+        } catch (MalformedURLException | URISyntaxException | IllegalArgumentException e) {
+            return baseUri.resolve(uri);
+        }
     }
 
     /**

Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/apps/io/URIResolverWrapperTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/apps/io/URIResolverWrapperTestCase.java?rev=1903877&r1=1903876&r2=1903877&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/apps/io/URIResolverWrapperTestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/apps/io/URIResolverWrapperTestCase.java Mon Sep  5 08:54:25 2022
@@ -46,12 +46,10 @@ import org.apache.xmlgraphics.util.io.Ba
 public class URIResolverWrapperTestCase {
 
     private static final List<String> BASE_URIS = Collections.unmodifiableList(Arrays.asList(
-                 new String[] {
-                         ".",
-                         "../",
-                         "some/path",
-                         "file:///absolute/file/path"}
-                 ));
+            ".",
+            "../",
+            "some/path",
+            "file:///absolute/file/path"));
 
     private URI base;
 
@@ -151,4 +149,11 @@ public class URIResolverWrapperTestCase
             // PASS
         }
     }
+
+    @Test
+    public void testJarUri() {
+        URI uri = new InternalResourceResolver(URI.create("jar:file:/home/my.jar!/fop.xconf"), null)
+                .resolveFromBase(URI.create("x"));
+        assertEquals(uri.toString(), "jar:file:/home/my.jar!/x");
+    }
 }