You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Luís Filipe Nassif (Jira)" <ji...@apache.org> on 2021/03/15 22:07:00 UTC

[jira] [Issue Comment Deleted] (PDFBOX-4671) NoClassDefFoundError: Could not initialize class org.apache.pdfbox.jbig2.JBIG2ImageReader

     [ https://issues.apache.org/jira/browse/PDFBOX-4671?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Luís Filipe Nassif updated PDFBOX-4671:
---------------------------------------
    Comment: was deleted

(was: Not sure if this is related or another issue, so I will post here to not open a possible duplicate. My project uses a custom class loader for all application. When trying to use pdfbox jbig2-3.0.2 plugin with IcePDF-6.3.2 library, jbig2 images are not decoded and no error is thrown. When using JVM default classloader, it works. After some debugging, I got the following stacktrace:

 java.lang.NoClassDefFoundError: Could not initialize class org.apache.pdfbox.jbig2.JBIG2ImageReaderjava.lang.NoClassDefFoundError: Could not initialize class org.apache.pdfbox.jbig2.JBIG2ImageReader at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at org.icepdf.core.pobjects.graphics.images.JBig2Decoder.decodeJbig2(JBig2Decoder.java:128) at org.icepdf.core.pobjects.graphics.images.JBig2Decoder.decode(JBig2Decoder.java:82) at org.icepdf.core.pobjects.graphics.images.ImageStream.getImage(ImageStream.java:94) at org.icepdf.core.pobjects.graphics.images.references.ImageStreamReference.call(ImageStreamReference.java:74) at org.icepdf.core.pobjects.graphics.images.references.ImageStreamReference.call(ImageStreamReference.java:40) at org.icepdf.core.pobjects.graphics.images.references.ImageReference.createImage(ImageReference.java:123) at org.icepdf.core.pobjects.graphics.images.references.CachedImageReference.getImage(CachedImageReference.java:58) at org.icepdf.core.pobjects.graphics.images.references.ImageReference.drawImage(ImageReference.java:83) at org.icepdf.core.pobjects.graphics.commands.ImageDrawCmd.paintOperand(ImageDrawCmd.java:96) at org.icepdf.core.pobjects.graphics.Shapes.paint(Shapes.java:148) at org.icepdf.core.pobjects.Page.paintPageContent(Page.java:635) at org.icepdf.core.pobjects.Page.paint(Page.java:580) at org.icepdf.ri.common.views.AbstractPageViewComponent$PageImageCaptureTask.call(AbstractPageViewComponent.java:432) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

 That was caused by:

 java.util.ServiceConfigurationError: org.apache.pdfbox.jbig2.util.log.LoggerBridge: Provider org.apache.pdfbox.jbig2.util.log.JDKLoggerBridge not a subtype at java.util.ServiceLoader.fail(Unknown Source) at java.util.ServiceLoader.access$300(Unknown Source) at java.util.ServiceLoader$LazyIterator.nextService(Unknown Source) at java.util.ServiceLoader$LazyIterator.next(Unknown Source) at java.util.ServiceLoader$1.next(Unknown Source) at org.apache.pdfbox.jbig2.util.log.LoggerFactory.getLogger(LoggerFactory.java:47) at org.apache.pdfbox.jbig2.util.log.LoggerFactory.getLogger(LoggerFactory.java:54) at org.apache.pdfbox.jbig2.JBIG2ImageReader.<clinit>(JBIG2ImageReader.java:48) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at org.icepdf.core.pobjects.graphics.images.JBig2Decoder.decodeJbig2(JBig2Decoder.java:128) at org.icepdf.core.pobjects.graphics.images.JBig2Decoder.decode(JBig2Decoder.java:82) at org.icepdf.core.pobjects.graphics.images.ImageStream.getImage(ImageStream.java:94) at org.icepdf.core.pobjects.graphics.images.references.ImageStreamReference.call(ImageStreamReference.java:74) at org.icepdf.core.pobjects.graphics.images.references.ImageStreamReference.call(ImageStreamReference.java:40) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

Looking at org.apache.pdfbox.jbig2.util.ServiceLookup, seems if a classloader is provided, it is not used by default, just if the service is not found firstly. I think the logic may be inverted to give preference to provided class loader:

 public class ServiceLookup<B> { public Iterator<B> getServices(Class<B> cls) { return getServices(cls, null); } public Iterator<B> getServices(Class<B> cls, ClassLoader clsLoader) { Iterator<B> services = null; if (clsLoader != null) \{ services = ServiceLoader.load(cls, clsLoader).iterator(); } if (services == null || !services.hasNext()) \{ services = ServiceLoader.load(cls, cls.getClass().getClassLoader()).iterator(); } if (services == null || !services.hasNext()) \{ services = ServiceLoader.load(cls).iterator(); } return services; } }

With that change, jbig2 plugin works with my custom classloader + IcePDF. PDFBox + JBig2 plugin works with and without the custom classloader.)

> NoClassDefFoundError: Could not initialize class org.apache.pdfbox.jbig2.JBIG2ImageReader
> -----------------------------------------------------------------------------------------
>
>                 Key: PDFBOX-4671
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-4671
>             Project: PDFBox
>          Issue Type: Bug
>          Components: JBIG2
>    Affects Versions: 3.0.2 JBIG2
>            Reporter: Luis Panadero Guardeño
>            Assignee: Joerg O. Henne
>            Priority: Major
>             Fix For: 3.0.4 JBIG2
>
>         Attachments: jbig2 servlet failcase.tar.gz
>
>
> JBIG2 ImageIO plugin sometimes does a NoClassDefFoundError
> I'm using TwelveMonkeys IIOProviderContextListener to fix the problem of ImageIO with servlets, and additionally doing a {{ImageIO}}.{{scanForPlugins}}(). But this keeps happening randomly. Any idea where could be the problem ?
> This is happening with Tomcat 7  running over Oracle Java 8 (latest version)
>  
> {code:java}
> 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:84)
>  at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:175)
>  at org.apache.pdfbox.pdmodel.common.PDStream.createInputStream(PDStream.java:241)
>  at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.createInputStream(PDImageXObject.java:735)
>  at org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.from1Bit(SampledImageReader.java:253)
>  at org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.getRGBImage(SampledImageReader.java:212)
>  at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.getImage(PDImageXObject.java:444)
>  at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.getImage(PDImageXObject.java:425)
>  at org.apache.pdfbox.rendering.PageDrawer.drawImage(PageDrawer.java:1100)
>  at org.apache.pdfbox.contentstream.operator.graphics.DrawObject.process(DrawObject.java:63)
>  at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:869)
>  at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:505)
>  at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:479)
>  at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:152)
>  at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:263)
>  at org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:321)
>  at org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:243)
>  at org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:203)
>  at com.digibis.digiimage.pdf.pdfbox.PdfBoxPdfProcessor.getImageFromDocumentPage(PdfBoxPdfProcessor.java:105){code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: dev-help@pdfbox.apache.org