You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-dev@xmlgraphics.apache.org by "adam Retter (JIRA)" <ji...@apache.org> on 2017/11/15 19:46:00 UTC

[jira] [Commented] (FOP-2758) [PATCH] Font Detection fails for custom URI schemes

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

adam Retter commented on FOP-2758:
----------------------------------

[~gadams] What is an ICLA please?

> [PATCH] Font Detection fails for custom URI schemes
> ---------------------------------------------------
>
>                 Key: FOP-2758
>                 URL: https://issues.apache.org/jira/browse/FOP-2758
>             Project: FOP
>          Issue Type: Bug
>    Affects Versions: 2.2
>            Reporter: adam Retter
>            Assignee: simon steiner
>         Attachments: fop-font-detector-factory.patch
>
>
> If you are using a custom URI scheme with FOP, then auto-detection of fonts currently throws an exception, because it assumes the URI is convertible to a URL, however Java by default does not support the custom URIs.
> With FOP in eXist-db we use the URI scheme {{exist}} for resolving resolving resources from the database.
> Our FOP setup looks like this:
> {code}
> URI baseUri = new URI("exist://localhost" + configFile.getOwnerDocument().getBaseURI());
> final ResourceResolverFactory.SchemeAwareResourceResolverBuilder resBuilder = ResourceResolverFactory.createSchemeAwareResourceResolverBuilder(ResourceResolverFactory.createDefaultResourceResolver());
> final URIResolverAdapter uriResolver = new URIResolverAdapter(
>     new ExistSchemeRewriter(new EXistURIResolver(broker.getBrokerPool(), baseUri))
> );
> resBuilder.registerResourceResolverForScheme("exist", uriResolver);
>         
> final EnvironmentProfile environment = EnvironmentalProfileFactory.createDefault(baseUri, resBuilder.build());
> FopFactoryBuilder builder = new FopFactoryBuilder(environment).setConfiguration(cfg);
> {code}
> Our FOP config file looks like:
> {code}
> <fop version="1.0">
>   <renderers>
>     <renderer mime="application/pdf">
>       <fonts>
>         <auto-detect/>
>       </fonts>
>     </renderer>
>   </renderers>
> </fop>
> {code}
> The error occurs because of these lines in {{org.apache.fop.fonts.FontDetectorFactory}}:
> {code}
>                 URI fontBaseURI = fontManager.getResourceResolver().getBaseURI();
>                 File fontBase = FileUtils.toFile(fontBaseURI.toURL());
> {code}
> In particular the {{fontBaseURI.toURL()}} generates a {{MalformedURLException}}. The URL is actually perfectly valid, it is just that Java does not have a handler for it.
> The attached patch, simply wraps that in a {{try/catch}} and logs the exception as a warning, as this seems to be a non-critical path, after which system fonts can still be correctly be detected.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)