I was having a problem a month ago with reading JPEG2000 files on tomcat,
that seemed identical to what is described in a posting to this list by
Chris Gamache <https://plus.google.com/u/0/101607728077454498498?prsrc=4>
 <cgama...@gmail.com> on Jun 21 2017 with the subject "PDFBox JPEG2000 and
Tomcat".  Basically PDFBox was 'forgetting' about the JPEG2000 library at
some point, and getting an error when reading a JPEG2000 file.

I reached out to Chris and he was kind enough to offer me his solution,
which is to check for whether JPEG2000 is loaded before each call to
PDFBox, and then reload it.  And that seemed to resolve my problem.

I recently upgraded to PDFBox 2.0.11, and removed the library
levigo-jbig2-imageio-1.6.5.jar as those entry points were now being defined
in pdfbox-app-2.0.11.jar.

And what appears to be the same error is back.  Running one JPEG2000 image
is fine, but at some point I get the error

java.lang.NoClassDefFoundError: Could not initialize class
org.apache.pdfbox.jbig2.JBIG2ImageReader
  at
org.apache.pdfbox.jbig2.JBIG2ImageReaderSpi.createReaderInstance(JBIG2ImageReaderSpi.java:117)
  at
javax.imageio.spi.ImageReaderSpi.createReaderInstance(ImageReaderSpi.java:320)
  at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:529)
  at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:513)
  at org.apache.pdfbox.filter.Filter.findImageReader(Filter.java:155)
  at org.apache.pdfbox.filter.JBIG2Filter.decode(JBIG2Filter.java:67)
  at org.apache.pdfbox.cos.COSInputStream.create(COSInputStream.java:77)
  at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:175)
  at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:163)
  at
org.apache.pdfbox.pdmodel.common.PDStream.createInputStream(PDStream.java:236)
  at
org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.createInputStream(PDImageXObject.java:695)
  at
org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.getStencilImage(SampledImageReader.java:91)
  at
org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.getStencilImage(PDImageXObject.java:483)
  at org.apache.pdfbox.rendering.PageDrawer.drawImage(PageDrawer.java:1029)
  at
org.apache.pdfbox.contentstream.operator.graphics.DrawObject.process(DrawObject.java:62)
  at
org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:848)
  at
org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:503)
  at
org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:477)
  at
org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:150)
  at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:246)
  at
org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:225)
  at
org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:150)

Which is very similar to the error I got with PDFBox 2.0.7 and the levigo
jar

java.lang.NoClassDefFoundError: Could not initialize class
com.levigo.jbig2.JBIG2ImageReader
  at
com.levigo.jbig2.JBIG2ImageReaderSpi.createReaderInstance(JBIG2ImageReaderSpi.java:118)
  at
javax.imageio.spi.ImageReaderSpi.createReaderInstance(ImageReaderSpi.java:320)
  at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:529)
  at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:513)
  at org.apache.pdfbox.filter.Filter.findImageReader(Filter.java:120)
  at org.apache.pdfbox.filter.JBIG2Filter.decode(JBIG2Filter.java:54)
  at org.apache.pdfbox.cos.COSInputStream.create(COSInputStream.java:69)
  at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:167)
  at
org.apache.pdfbox.pdmodel.common.PDStream.createInputStream(PDStream.java:235)
  at
org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.<init>(PDImageXObject.java:125)
  at
org.apache.pdfbox.pdmodel.graphics.PDXObject.createXObject(PDXObject.java:70)
  at org.apache.pdfbox.pdmodel.PDResources.getXObject(PDResources.java:409)
  at com.moneythumb.convert.i.processOperator(SourceFile:72)
  at
org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:495)
  at
org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:469)
  at
org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:150)

Also the workaround from Chris was still in place, but did not appear to
help, although it is not specific to any packaging.  It checks whether the
reader for format 'JPEG2000' canReadRaster() and if not calls
IIORegistry.getDefaultInstance.registerApplicationClasspathSpis();.

So my take is that PDFBox inherited whatever problem was there previously
in the  JBIG2 ImageIO plugin.

And I am surprised that the workaround did not help - I assume the format
is still known at 'JPEG2000', right?

Reply via email to