Steps to reproduce
Create a fop-user-config.xml with a font URL containing a custom protocol (like plugin) :
<font kerning="yes" embed-url="plugin:myplugin:>
<font-triplet name="MyFont" style="normal" weight="normal"/>
</font>
Try to generate a PDF.
You should get this error:
[...]
Caused by: org.apache.commons.lang.exception.NestableRuntimeException: javax.xml.transform.TransformerException: java.lang.RuntimeException: Failed to read font file plugin:myplugin: at org.apache.cocoon.transformation.TraxTransformer.endDocument(TraxTransformer.java:604)
at org.apache.xml.serializer.ToXMLSAXHandler.endDocument(ToXMLSAXHandler.java:183)
at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1369)
at org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java:3449)
at org.apache.xalan.transformer.TransformerHandlerImpl.endDocument(TransformerHandlerImpl.java:408)
at org.apache.cocoon.xml.AbstractXMLPipe.endDocument(AbstractXMLPipe.java:56)
at org.apache.cocoon.transformation.TraxTransformer.endDocument(TraxTransformer.java:586)
at fr.ametys.myproject.service.AbstractSearchGenerator.generate(AbstractSearchGenerator.java:103)
at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.processXMLPipeline(AbstractProcessingPipeline.java:581)
... 98 more
Caused by: javax.xml.transform.TransformerException: java.lang.RuntimeException: Failed to read font file plugin:myplugin: at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2407)
at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
at org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376)
at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395)
at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:178)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402)
at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2272)
at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1358)
at org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java:3449)
at org.apache.xalan.transformer.TransformerHandlerImpl.endDocument(TransformerHandlerImpl.java:408)
at org.apache.cocoon.xml.AbstractXMLPipe.endDocument(AbstractXMLPipe.java:56)
at org.apache.cocoon.transformation.TraxTransformer.endDocument(TraxTransformer.java:586)
... 106 more
Caused by: java.lang.RuntimeException: Failed to read font file plugin:myplugin: at org.apache.fop.fonts.LazyFont.load(LazyFont.java:134)
at org.apache.fop.fonts.LazyFont.getAscender(LazyFont.java:237)
at org.apache.fop.fonts.Font.getAscender(Font.java:120)
at org.apache.fop.layoutmgr.BlockLayoutManager.initialize(BlockLayoutManager.java:82)
at org.apache.fop.layoutmgr.AbstractLayoutManager.getChildLM(AbstractLayoutManager.java:118)
at org.apache.fop.layoutmgr.table.TableCellLayoutManager.getNextKnuthElements(TableCellLayoutManager.java:184)
at org.apache.fop.layoutmgr.table.RowGroupLayoutManager.createElementsForRowGroup(RowGroupLayoutManager.java:120)
at org.apache.fop.layoutmgr.table.RowGroupLayoutManager.getNextKnuthElements(RowGroupLayoutManager.java:63)
at org.apache.fop.layoutmgr.table.TableContentLayoutManager.getKnuthElementsForRowIterator(TableContentLayoutManager.java:270)
at org.apache.fop.layoutmgr.table.TableContentLayoutManager.getNextKnuthElements(TableContentLayoutManager.java:212)
at org.apache.fop.layoutmgr.table.TableLayoutManager.getNextKnuthElements(TableLayoutManager.java:277)
at org.apache.fop.layoutmgr.FlowLayoutManager.getNextChildElements(FlowLayoutManager.java:223)
at org.apache.fop.layoutmgr.FlowLayoutManager.addChildElements(FlowLayoutManager.java:148)
at org.apache.fop.layoutmgr.FlowLayoutManager.getNextKnuthElements(FlowLayoutManager.java:116)
at org.apache.fop.layoutmgr.FlowLayoutManager.getNextKnuthElements(FlowLayoutManager.java:69)
at org.apache.fop.layoutmgr.PageBreaker.getNextKnuthElements(PageBreaker.java:252)
at org.apache.fop.layoutmgr.AbstractBreaker.getNextBlockList(AbstractBreaker.java:675)
at org.apache.fop.layoutmgr.PageBreaker.getNextBlockList(PageBreaker.java:179)
at org.apache.fop.layoutmgr.PageBreaker.getNextBlockList(PageBreaker.java:159)
at org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java:385)
at org.apache.fop.layoutmgr.PageBreaker.doLayout(PageBreaker.java:113)
at org.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageSequenceLayoutManager.java:143)
at org.apache.fop.area.AreaTreeHandler.endPageSequence(AreaTreeHandler.java:267)
at org.apache.fop.fo.DelegatingFOEventHandler.endPageSequence(DelegatingFOEventHandler.java:114)
at org.apache.fop.accessibility.fo.FO2StructureTreeConverter.endPageSequence(FO2StructureTreeConverter.java:184)
at org.apache.fop.fo.pagination.PageSequence.endOfNode(PageSequence.java:140)
at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder.java:390)
at org.apache.fop.fo.FOTreeBuilder$3.run(FOTreeBuilder.java:207)
at org.apache.fop.fo.FOTreeBuilder$3.run(FOTreeBuilder.java:204)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:203)
at org.apache.cocoon.xml.AbstractXMLPipe.endElement(AbstractXMLPipe.java:112)
at org.apache.cocoon.components.EnvironmentChanger.endElement(EnvironmentStack.java:148)
at org.apache.cocoon.xml.AbstractXMLPipe.endElement(AbstractXMLPipe.java:112)
at org.apache.cocoon.transformation.I18nTransformer.endElement(I18nTransformer.java:1222)
at org.apache.xml.serializer.ToXMLSAXHandler.endElement(ToXMLSAXHandler.java:263)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1401)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402)
... 119 more
Caused by: java.net.MalformedURLException: unknown protocol: plugin
at java.base/java.net.URL.<init>(URL.java:681)
at java.base/java.net.URL.fromURI(URL.java:748)
at java.base/java.net.URI.toURL(URI.java:1139)
at org.apache.fop.apps.io.ResourceResolverFactory$NormalResourceResolver.getResource(ResourceResolverFactory.java:224)
at org.apache.fop.apps.io.ResourceResolverFactory$TempAwareResourceResolver.getResource(ResourceResolverFactory.java:152)
at org.apache.fop.apps.io.ResourceResolverFactory$DefaultResourceResolver.getResource(ResourceResolverFactory.java:121)
at org.apache.fop.apps.io.InternalResourceResolver.getResource(InternalResourceResolver.java:92)
at org.apache.fop.fonts.truetype.OFFontLoader.read(OFFontLoader.java:113)
at org.apache.fop.fonts.truetype.OFFontLoader.read(OFFontLoader.java:103)
at org.apache.fop.fonts.FontLoader.getFont(FontLoader.java:126)
at org.apache.fop.fonts.FontLoader.loadFont(FontLoader.java:110)
at org.apache.fop.fonts.LazyFont.load(LazyFont.java:121)
... 156 more
Analyze
Custom resolver is ignored by FopFactoryBuilder when adding a custom configuration (https://issues.apache.org/jira/browse/FOP-3109).
To avoid this, there is a workaround described here: https://github.com/fugerit79/fop-custom-resource-resolver-poc/commit/d2f8ec60b69d160442c16025ba4aff9c99c863a1
Since: 4.6 (FOP 2.7 and more)