[
https://issues.apache.org/jira/browse/FOP-2861?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17497276#comment-17497276
]
Beat Hörmann commented on FOP-2861:
-----------------------------------
It's clear to me now why FOP 2.7 doesn't pass my {{JarResourceResolver}} to the
font-manager. It's because I also pass a configuration file to the
{{{}FopFactoryBuilder{}}}:
{code:java}
if (config_uri != null) {
final DefaultConfigurationBuilder cfgBuilder = new
DefaultConfigurationBuilder();
try (InputStream inputStream = config_uri.toURL().openStream()){
final Configuration cfg = cfgBuilder.build(inputStream);
builder.setConfiguration(cfg);
}
catch (Exception e) {
throw new RuntimeException("Error initializing Apache FOP", e);
}
}
{code}
The crucial point is
{code:java}
builder.setConfiguration(cfg);
{code}
which eventually calls the following constructor of
{{org.apache.fop.apps.FopConfParser}}
{code:java}
public FopConfParser(Configuration cfg, FopFactoryBuilder fopFactoryBuilder)
throws SAXException {
this.fopFactoryBuilder = fopFactoryBuilder;
configure(fopFactoryBuilder.getBaseURI(),
ResourceResolverFactory.createDefaultResourceResolver(), cfg);
}
{code}
where the statement
{code:java}
ResourceResolverFactory.createDefaultResourceResolver()
{code}
creates a new default resource resolver instead of taking the custom resource
resolver (= my {{{}JarResourceResolver{}}}) stored in the
{{{}fopFactoryBuilder{}}}.
> 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)