And here is a link to the original post by Chris https://lists.apache.org/[email protected]:dfr=2017-6-1|dto=2017-8-1:tomcat <https://lists.apache.org/[email protected]:dfr=2017-6-1|dto=2017-8-1:tomcat>
On Wed, Aug 1, 2018 at 8:42 AM, Joel Hirsh <[email protected]> wrote: > 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> > <[email protected]> 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? > > >

