[jira] [Closed] (FOP-2914) NPE during FO 2 IF transformation with instream-foreign-object using Saxon

"Joao Goncalves (Jira)" <[email protected]> Tue, 26 May 2026 16:54:00 +0000 (UTC)
Newsgroups gmane.text.xml.fop.devel
Message-ID <[email protected]>
     [ https://issues.apache.org/jira/browse/FOP-2914?page=3Dcom.atlassian.=
jira.plugin.system.issuetabpanels:all-tabpanel ]

Joao Goncalves closed FOP-2914.
-------------------------------
    Resolution: Not A Problem

> NPE during FO 2 IF transformation with instream-foreign-object using Saxo=
n
> -------------------------------------------------------------------------=
-
>
>                 Key: FOP-2914
>                 URL: https://issues.apache.org/jira/browse/FOP-2914
>             Project: FOP
>          Issue Type: Bug
>         Environment: Windows 10, OpenJDK 11.0.2, Fop 2.3 (Fop 2.4)
>            Reporter: M.H.
>            Priority: Major
>
> So far, we used Xalan (2.7.2) as the XSLT Processor to transform our XML/=
XSL to FO and further to IF (intermediate format) to concat these to one fi=
le that is finally rendered to PDF (to avoid multiple fonts via PDF concate=
nation). We now have a current version of a 3rd party library that breaks o=
ur app because of Xalan=C2=A0 (known bug:=C2=A0[https://stackoverflow.com/q=
uestions/45152707/transformerfactory-and-xalan-dependency-conflict]) . So w=
e investigated a lot of time, adjusted our XMl APIs, converted to JAXB, rem=
oved Xalan and werent able to use the JDK 11 internal XSLT processor becaus=
e our (hundreds of) XSLTs don't work anymore because they only seem to work=
 with a "lazy" XSLT processor like Xalan. For this reason, we evaluate the =
Saxon XSLT processor. With *Saxon*, most things work again except one bug:
> We (have to) include SVG files with instream-foreign-object:
> {code:xml}
> <fo:instream-foreign-object>
>   <svg:svg xmlns=3D"http://www.w3.org/2000/svg" xmlns:xlink=3D"http://www=
.w3.org/1999/xlink" width=3D"120mm" height=3D"120mm" >
>   =C2=A0 <svg:image xmlns:xlink=3D"http://www.w3.org/1999/xlink" xlink:hr=
ef=3D"Test.svg" width=3D"120mm" height=3D"120mm"/>
>   </svg:svg>
> </fo:instream-foreign-object>
> {code}
> And during the transformation of the FO to Apaches intermediate format IF=
, a NullPointerException occurs:
> {code:java}
> Error while rendering page 1. Reason: java.lang.NullPointerException=C2=
=A0 =C2=A0  at org.apache.fop.events.EventExceptionManager.throwException(E=
ventExceptionManager.java:74)=C2=A0 =C2=A0  at org.apache.fop.events.Defaul=
tEventBroadcaster$1.invoke(DefaultEventBroadcaster.java:173)=C2=A0 =C2=A0  =
at com.sun.proxy.$Proxy11.pageRenderingError(Unknown Source)=C2=A0 =C2=A0  =
at org.apache.fop.area.RenderPagesModel.renderPage(RenderPagesModel.java:20=
6)=C2=A0 =C2=A0  at org.apache.fop.area.RenderPagesModel.checkPreparedPages=
(RenderPagesModel.java:174)=C2=A0 =C2=A0  at org.apache.fop.area.RenderPage=
sModel.addPage(RenderPagesModel.java:146)=C2=A0 =C2=A0  at org.apache.fop.l=
ayoutmgr.AbstractPageSequenceLayoutManager.finishPage(AbstractPageSequenceL=
ayoutManager.java:316)=C2=A0 =C2=A0  at org.apache.fop.layoutmgr.PageSequen=
ceLayoutManager.finishPage(PageSequenceLayoutManager.java:243)=C2=A0 =C2=A0=
  at org.apache.fop.layoutmgr.AbstractPageSequenceLayoutManager.makeNewPage=
(AbstractPageSequenceLayoutManager.java:287)=C2=A0 =C2=A0  at org.apache.fo=
p.layoutmgr.PageSequenceLayoutManager.makeNewPage(PageSequenceLayoutManager=
.java:192)=C2=A0 =C2=A0  at org.apache.fop.layoutmgr.PageBreaker.handleBrea=
kTrait(PageBreaker.java:633)=C2=A0 =C2=A0  at org.apache.fop.layoutmgr.Page=
Breaker.startPart(PageBreaker.java:511)=C2=A0 =C2=A0  at org.apache.fop.lay=
outmgr.AbstractBreaker.addAreas(AbstractBreaker.java:659)=C2=A0 =C2=A0  at =
org.apache.fop.layoutmgr.AbstractBreaker.addAreas(AbstractBreaker.java:604)=
=C2=A0 =C2=A0  at org.apache.fop.layoutmgr.AbstractBreaker.addAreas(Abstrac=
tBreaker.java:599)=C2=A0 =C2=A0  at org.apache.fop.layoutmgr.PageBreaker.do=
Phase3(PageBreaker.java:338)=C2=A0 =C2=A0  at org.apache.fop.layoutmgr.Abst=
ractBreaker.doLayout(AbstractBreaker.java:458)=C2=A0 =C2=A0  at org.apache.=
fop.layoutmgr.PageBreaker.doLayout(PageBreaker.java:112)=C2=A0 =C2=A0  at o=
rg.apache.fop.layoutmgr.PageSequenceLayoutManager.activateLayout(PageSequen=
ceLayoutManager.java:143)=C2=A0 =C2=A0  at org.apache.fop.area.AreaTreeHand=
ler.endPageSequence(AreaTreeHandler.java:267)=C2=A0 =C2=A0  at org.apache.f=
op.fo.pagination.PageSequence.endOfNode(PageSequence.java:130)=C2=A0 =C2=A0=
  at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder=
.java:360)=C2=A0 =C2=A0  at org.apache.fop.fo.FOTreeBuilder.endElement(FOTr=
eeBuilder.java:190)=C2=A0 =C2=A0  at de.icomps.xml.FOP$HandlerXML.endElemen=
t(FOP.java:1624)=C2=A0 =C2=A0  at net.sf.saxon.event.ContentHandlerProxy.en=
dElement(ContentHandlerProxy.java:412)=C2=A0 =C2=A0  at net.sf.saxon.event.=
ProxyReceiver.endElement(ProxyReceiver.java:185)=C2=A0 =C2=A0  at net.sf.sa=
xon.event.SequenceNormalizer.endElement(SequenceNormalizer.java:230)=C2=A0 =
=C2=A0  at net.sf.saxon.event.ReceivingContentHandler.endElement(ReceivingC=
ontentHandler.java:528)=C2=A0 =C2=A0  at org.apache.xerces.parsers.Abstract=
SAXParser.endElement(Unknown Source)=C2=A0 =C2=A0  at org.apache.xerces.imp=
l.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)=C2=A0 =C2=A0  at =
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispat=
cher.dispatch(Unknown Source)=C2=A0 =C2=A0  at org.apache.xerces.impl.XMLDo=
cumentFragmentScannerImpl.scanDocument(Unknown Source)=C2=A0 =C2=A0  at org=
.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)=C2=A0 =C2=
=A0  at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)=
=C2=A0 =C2=A0  at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)=
=C2=A0 =C2=A0  at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown=
 Source)=C2=A0 =C2=A0  at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParse=
r.parse(Unknown Source)=C2=A0 =C2=A0  at net.sf.saxon.event.Sender.sendSAXS=
ource(Sender.java:435)=C2=A0 =C2=A0  at net.sf.saxon.event.Sender.send(Send=
er.java:167)=C2=A0 =C2=A0  at net.sf.saxon.jaxp.IdentityTransformer.transfo=
rm(IdentityTransformer.java:368)=C2=A0 =C2=A0  at de.icomps.xml.FOP.transfo=
rmFO(FOP.java:1055)=C2=A0 =C2=A0  at de.icomps.xml.FOP.fo2IF(FOP.java:789)=
=C2=A0 =C2=A0  at de.icomps.rep.Report.createWithFOP(Report.java:3772)=C2=
=A0 =C2=A0  at de.icomps.rep.Report.processReport(Report.java:2078)=C2=A0 =
=C2=A0  at de.icomps.rep.ReportClient.createClientReport(ReportClient.java:=
266)=C2=A0 =C2=A0  at de.icomps.rep.ReportClientMulti.genClientReportSingle=
(ReportClientMulti.java:2537)=C2=A0 =C2=A0  at de.icomps.rep.ReportClientMu=
lti.genClientReports(ReportClientMulti.java:1804)=C2=A0 =C2=A0  at de.icomp=
s.rep.ReportClientMulti.createReport(ReportClientMulti.java:288)=C2=A0 =C2=
=A0  at de.icomps.rep.Report.startProcessing(Report.java:1548)=C2=A0 =C2=A0=
  at de.icomps.ijs.JobTask.startJob(JobTask.java:412)=C2=A0 =C2=A0  at de.i=
comps.ijs.JobTask.run(JobTask.java:154)=C2=A0 =C2=A0  at java.base/java.lan=
g.Thread.run(Thread.java:834)=C2=A0 =C2=A0 Caused by: java.lang.NullPointer=
Exception=C2=A0 =C2=A0  at net.sf.saxon.event.ReceivingContentHandler.getNo=
deName(ReceivingContentHandler.java:485)=C2=A0 =C2=A0  at net.sf.saxon.even=
t.ReceivingContentHandler.startElement(ReceivingContentHandler.java:398)=C2=
=A0 =C2=A0  at org.apache.fop.util.DelegatingContentHandler.startElement(De=
legatingContentHandler.java:185)=C2=A0 =C2=A0  at org.apache.fop.util.DOM2S=
AX.writeNode(DOM2SAX.java:263)=C2=A0 =C2=A0  at org.apache.fop.util.DOM2SAX=
.writeDocument(DOM2SAX.java:73)=C2=A0 =C2=A0  at org.apache.fop.render.inte=
rmediate.IFSerializer.drawImage(IFSerializer.java:508)=C2=A0 =C2=A0  at org=
.apache.fop.render.intermediate.IFRenderer.renderForeignObject(IFRenderer.j=
ava:1312)=C2=A0 =C2=A0  at org.apache.fop.render.AbstractRenderer.renderInl=
ineViewport(AbstractRenderer.java:864)=C2=A0 =C2=A0  at org.apache.fop.rend=
er.AbstractPathOrientedRenderer.renderInlineViewport(AbstractPathOrientedRe=
nderer.java:831)=C2=A0 =C2=A0  at org.apache.fop.render.intermediate.IFRend=
erer.renderInlineViewport(IFRenderer.java:862)=C2=A0 =C2=A0  at org.apache.=
fop.render.AbstractRenderer.renderInlineArea(AbstractRenderer.java:717)=C2=
=A0 =C2=A0  at org.apache.fop.render.intermediate.IFRenderer.renderInlineAr=
ea(IFRenderer.java:926)=C2=A0 =C2=A0  at org.apache.fop.render.AbstractRend=
erer.renderLineArea(AbstractRenderer.java:692)=C2=A0 =C2=A0  at org.apache.=
fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.java:573)=C2=A0 =
=C2=A0  at org.apache.fop.render.AbstractRenderer.renderBlock(AbstractRende=
rer.java:615)=C2=A0 =C2=A0  at org.apache.fop.render.intermediate.IFRendere=
r.renderBlock(IFRenderer.java:998)=C2=A0 =C2=A0  at org.apache.fop.render.A=
bstractRenderer.renderBlocks(AbstractRenderer.java:558)=C2=A0 =C2=A0  at or=
g.apache.fop.render.AbstractRenderer.renderBlock(AbstractRenderer.java:615)=
=C2=A0 =C2=A0  at org.apache.fop.render.intermediate.IFRenderer.renderBlock=
(IFRenderer.java:998)=C2=A0 =C2=A0  at org.apache.fop.render.AbstractRender=
er.renderBlocks(AbstractRenderer.java:558)=C2=A0 =C2=A0  at org.apache.fop.=
render.AbstractPathOrientedRenderer.renderReferenceArea(AbstractPathOriente=
dRenderer.java:756)=C2=A0 =C2=A0  at org.apache.fop.render.AbstractRenderer=
.renderBlock(AbstractRenderer.java:601)=C2=A0 =C2=A0  at org.apache.fop.ren=
der.intermediate.IFRenderer.renderBlock(IFRenderer.java:998)=C2=A0 =C2=A0  =
at org.apache.fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.jav=
a:558)=C2=A0 =C2=A0  at org.apache.fop.render.AbstractRenderer.renderBlock(=
AbstractRenderer.java:615)=C2=A0 =C2=A0  at org.apache.fop.render.intermedi=
ate.IFRenderer.renderBlock(IFRenderer.java:998)=C2=A0 =C2=A0  at org.apache=
.fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.java:558)=C2=A0 =
=C2=A0  at org.apache.fop.render.AbstractRenderer.renderFlow(AbstractRender=
er.java:459)=C2=A0 =C2=A0  at org.apache.fop.render.AbstractPathOrientedRen=
derer.renderFlow(AbstractPathOrientedRenderer.java:784)=C2=A0 =C2=A0  at or=
g.apache.fop.render.AbstractRenderer.renderMainReference(AbstractRenderer.j=
ava:436)=C2=A0 =C2=A0  at org.apache.fop.render.AbstractRenderer.renderBody=
Region(AbstractRenderer.java:360)=C2=A0 =C2=A0  at org.apache.fop.render.Ab=
stractRenderer.renderRegionViewport(AbstractRenderer.java:307)=C2=A0 =C2=A0=
  at org.apache.fop.render.intermediate.IFRenderer.renderRegionViewport(IFR=
enderer.java:737)=C2=A0 =C2=A0  at org.apache.fop.render.AbstractRenderer.r=
enderPageAreas(AbstractRenderer.java:272)=C2=A0 =C2=A0  at org.apache.fop.r=
ender.AbstractRenderer.renderPage(AbstractRenderer.java:245)=C2=A0 =C2=A0  =
at org.apache.fop.render.intermediate.IFRenderer.renderPage(IFRenderer.java=
:587)=C2=A0 =C2=A0  at org.apache.fop.area.RenderPagesModel.renderPage(Rend=
erPagesModel.java:193)=C2=A0 =C2=A0  ... 48 more
> {code}
> Trying=C2=A0
> {code:xml}
> <fo:external-graphic height=3D"120mm" width=3D"120mm" src=3D"Test.svg"/> =
 {code}
> the error does not occur, but the output is wrong (SVG is not displayed c=
orrectly - this is the case since FOP 0.95, etc.).
> We tested with our current FOP 2.3 and also with the latest FOP 2.4; used=
 different SVG files, fiddled with several parameters of instream-foreign-o=
bject / svg:svg / svg: image, ....always=C2=A0 same error.
> So we end up not being able to use the JDK internal XSLT or Xalan XSLT pr=
ocessor and are stuck with Saxon at this single NullPointerException during=
 FO to IF transaformation. We spend yesterday the whole day (!)=C2=A0search=
 for solutions / workarounds on the web but the only hint we found was some=
thing with namespaces or empty URIs.
> We tried to create a reproducable case with "fop.bat" and plain FOP direc=
tory (original, without Xalan, without Xalan and with Saxon), same OpenJDK,=
=C2=A0 create single scripts to transform FO to IF and IF to PDF, but the b=
ug didn't occur! So, it seems it only occours when using the Java API.
> {code:java}
>             final Result res =3D new SAXResult(h);
>             transformer.transform(ssFO, res); {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)