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 17:18:00 UTC

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

adam Retter created FOP-2758:
--------------------------------

             Summary: [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
         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)