[ https://issues.apache.org/jira/browse/FOP-3054?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
tntim96 updated FOP-3054: ------------------------- Description: The following FOP config and customer resolver works with FOP 2.6 {code:java} ResourceResolver rr = ResourceResolverFactory .createTempAwareResourceResolver(new InMemoryTempResourceResolver(), new CustomResolver()); {code} {code:java} class CustomResolver implements ResourceResolver { public org.apache.xmlgraphics.io.Resource getResource(URI uri) throws IOException { if (uri.toString().startsWith("classpath:")) { String actualPath = uri.toString().substring("classpath:".length()); try { ClassPathResource resource = new ClassPathResource(actualPath); InputStream resourceAsStream = resource.getInputStream(); {code} {code:java} <?xml version="1.0" encoding="utf-8" ?> <fop> <renderers> <renderer mime="application/pdf"> <fonts> <font kerning="yes" embed-url="classpath:/somepath/DejaVuSans-Regular.ttf"> <font-triplet name="DejaVuSans" style="normal" weight="normal"/> </font> </fonts> </renderer> </renderers> </fop> {code} ...but with 2.7 we get the error: {noformat} 16:04:03.006 [main] ERROR org.apache.fop.fonts.LazyFont - Failed to read font file classpath:/somepath/DejaVuSans-Regular.ttf unknown protocol: classpath java.net.MalformedURLException: unknown protocol: classpath at java.net.URL.<init>(URL.java:600) at java.net.URL.<init>(URL.java:490) at java.net.URL.<init>(URL.java:439) at java.net.URI.toURL(URI.java:1089) 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) 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.FlowLayoutManager.getNextKnuthElements(FlowLayoutManager.java:128) 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) {noformat} It seems like our custom resolver is no longer invoked. was: The following FOP config works with FOP 2.6 {code:java} <?xml version="1.0" encoding="utf-8" ?> <fop> <renderers> <renderer mime="application/pdf"> <fonts> <font kerning="yes" embed-url="classpath:/somepath/DejaVuSans-Regular.ttf"> <font-triplet name="DejaVuSans" style="normal" weight="normal"/> </font> </fonts> </renderer> </renderers> </fop> {code} ...but with 2.7 we get the error: {noformat} 16:04:03.006 [main] ERROR org.apache.fop.fonts.LazyFont - Failed to read font file classpath:/somepath/DejaVuSans-Regular.ttf unknown protocol: classpath java.net.MalformedURLException: unknown protocol: classpath at java.net.URL.<init>(URL.java:600) at java.net.URL.<init>(URL.java:490) at java.net.URL.<init>(URL.java:439) at java.net.URI.toURL(URI.java:1089) 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) 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.FlowLayoutManager.getNextKnuthElements(FlowLayoutManager.java:128) 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) {noformat} > FOP Customer Resolver not Invoked In version 2.7 > ------------------------------------------------ > > Key: FOP-3054 > URL: https://issues.apache.org/jira/browse/FOP-3054 > Project: FOP > Issue Type: Bug > Affects Versions: 2.7 > Reporter: tntim96 > Priority: Major > > The following FOP config and customer resolver works with FOP 2.6 > {code:java} > ResourceResolver rr = ResourceResolverFactory > .createTempAwareResourceResolver(new InMemoryTempResourceResolver(), new > CustomResolver()); > {code} > {code:java} > class CustomResolver implements ResourceResolver { > public org.apache.xmlgraphics.io.Resource getResource(URI uri) throws > IOException { > if (uri.toString().startsWith("classpath:")) { > String actualPath = uri.toString().substring("classpath:".length()); > try { > ClassPathResource resource = new ClassPathResource(actualPath); > InputStream resourceAsStream = resource.getInputStream(); > {code} > {code:java} > <?xml version="1.0" encoding="utf-8" ?> > <fop> > <renderers> > <renderer mime="application/pdf"> > <fonts> > <font kerning="yes" > embed-url="classpath:/somepath/DejaVuSans-Regular.ttf"> > <font-triplet name="DejaVuSans" style="normal" weight="normal"/> > </font> > </fonts> > </renderer> > </renderers> > </fop> {code} > ...but with 2.7 we get the error: > {noformat} > 16:04:03.006 [main] ERROR org.apache.fop.fonts.LazyFont - Failed to read font > file classpath:/somepath/DejaVuSans-Regular.ttf unknown protocol: classpath > java.net.MalformedURLException: unknown protocol: classpath > at java.net.URL.<init>(URL.java:600) > at java.net.URL.<init>(URL.java:490) > at java.net.URL.<init>(URL.java:439) > at java.net.URI.toURL(URI.java:1089) > 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) > 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.FlowLayoutManager.getNextKnuthElements(FlowLayoutManager.java:128) > 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) > {noformat} > It seems like our custom resolver is no longer invoked. -- This message was sent by Atlassian Jira (v8.20.1#820001)