Argh... my stoopid mistake.

The servlet is a maven project, and when I bumped the fop-pdf-images
version I bumped the pdfbox dependency all the way up to 1.8.5. It took
digging through the source to discover that PDDocument.close() now sets
everything to null - the cause of the NPE.

Rebuilt with version 1.3.1 and am testing.

BTW, having a POM file in with the binary distro would be very handy for
idiots like me ;)

Matt



On 26 June 2014 13:36, Matt Kynaston <m...@claritum.com> wrote:

> Hi,
>
> I am embedding fop-1.1 and fop-pdf-images-2.1.0 in a tomcat servlet and
> I'm experiencing a NullPointerException in PreloaderPDF.loadPDF(..). The
> servlet is pretty much exactly the example servlet from the fop source,
> tweaked to handle posting FO documents.
>
> The problem seems similar to the one discussed down towards the bottom of
> http://apache-fop.1065347.n5.nabble.com/Fop-1-1-fop-pdf-images-PDFBox-1-8-3-4-td39965.html.
> This suggests the problem is with the FopFactory being shared between
> threads.
>
> However, my problem only surfaces after the server has been running for a
> while - it works during testing one day and next morning throws the error
> consistently. I haven't managed to create a set of steps to reproduce the
> problem on demand.
>
> I'm no expert, so sorry if I'm being a bit dense... but the solution would
> be to create a new FopFactory for every request? That seems to defeat the
> purpose of the factory a bit. Is there any other workaround?
>
> Environment: I'm seeing this both on OSX, Java 1.7.0_25-b15 / Tomcat
> 7.0.54 and CentOS6, Java 1.6.0_30 / Tomcat 6.0.24.
>
> Stack trace:
>
> java.lang.NullPointerException
>       
> org.apache.fop.render.pdf.pdfbox.PreloaderPDF.loadPDF(PreloaderPDF.java:117)
>       
> org.apache.fop.render.pdf.pdfbox.PreloaderPDF.preloadImage(PreloaderPDF.java:83)
>       
> org.apache.xmlgraphics.image.loader.ImageManager.preloadImage(ImageManager.java:175)
>       
> org.apache.xmlgraphics.image.loader.cache.ImageCache.needImageInfo(ImageCache.java:128)
>       
> org.apache.xmlgraphics.image.loader.ImageManager.getImageInfo(ImageManager.java:122)
>       org.apache.fop.fo.flow.ExternalGraphic.bind(ExternalGraphic.java:81)
>       org.apache.fop.fo.FObj.processNode(FObj.java:124)
>       
> org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuilder.java:280)
>       org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:175)
>       
> org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1020)
>       
> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
>       
> com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
>       
> com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:353)
>       
> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2717)
>       
> com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
>       
> com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
>       
> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
>       
> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
>       
> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
>       
> com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
>       
> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
>       
> org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:432)
>       com.claritum.fop.Servlet.render(Servlet.java:315)
>       com.claritum.fop.Servlet.renderFOString(Servlet.java:254)
>       com.claritum.fop.Servlet.doPost(Servlet.java:149)
>       javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
>       javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
>       org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>
> Many thanks for any hints you can give.
>
> Matt
>
>
>
>

Reply via email to