[ 
https://issues.apache.org/jira/browse/FOP-2861?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17497450#comment-17497450
 ] 

Beat Hörmann commented on FOP-2861:
-----------------------------------

FOP 2.7 is just one month old. Those who already had a workaround before, as 
me, and haven't yet changed to 2.7 may not have taken notice of this issue. 
I've seen somewhere on the net people referencing their items relative to 
Jar-Root and prefixing the path with "classpath:". This actually also worked 
for me when I deployed the application on Tomcat. But it didn't work outside of 
Tomcat and referencing fonts with an absolute path (absolute to jar-root or the 
filesystem's root) is a shaky affair.

The URI-class does what RFC2396 demands: Don't parse opaque URIs. But in the 
context of Java and its omnipresent Jar-file-format an URI starting with 
"jar:file:/" can't be considered "unknown". I haven't yet met an official class 
in the JDK that handles this issue once and for all.

Good that you have taken into account David's comment.

I'm looking forward seeing your patch in the source code of FOP and thus 
getting rid of my JarResourceResolver. (By the way: Implementing the 
{{org.apache.xmlgraphics.io.ResourceResolver}} interface seems like a bit much 
work when it's just a matter of resolving a relative path against a jar-URI.)

> Allow resource loading from jar: URI
> ------------------------------------
>
>                 Key: FOP-2861
>                 URL: https://issues.apache.org/jira/browse/FOP-2861
>             Project: FOP
>          Issue Type: Improvement
>    Affects Versions: 2.0, 2.1, 2.2, 2.3, 2.4, 2.6, 2.7
>            Reporter: Ole Sandum
>            Priority: Major
>         Attachments: FopResourceResolver.java, uri_resolve.diff, 
> uri_resolve_decoded.diff
>
>
> We would like to load our FOP config.xml along with related fonts and 
> hyphenation files using  the common classloader URL, e.g.:
> {{  URL configXml = getClass().getResource("config.xml");}}
> {{  FopConfParser confParser = }}
> {{      new FopConfParser(configXml.openStream(), configXml.toURI());}}
> This makes for easy deployment, and works nicely as long as classes and 
> resources are loaded from separate files, i.e. from 
> file:/some/path/config.xml URIs. However, it fails when classes and resources 
> are packaged and loaded directly from a jar, i.e. from 
> jar:file:/some/archive.jar!/path/config.xml URIs, as is the case when 
> deploying with JWS or running an all-in-one executable jar, as it will fail 
> to properly resolve the related font and hyphenation file URIs. 
> See [https://github.com/osandum/fop-test.git] for a test to illustrate.
> This is a consequence of a long standing issue (reported in 
> [https://bugs.openjdk.java.net/browse/JDK-8020755)] that 
> URI.resolve(childUri) doesn't work as expected on jar:file: URIs.
> In this case, it can be easily remedied by a work-around to the call in 
> InternalResourceResolver.resolveFromBase(URI uri). Patch attached.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to