Ole Sandum created FOP-3296:
-------------------------------

             Summary: pdfbox:3.0.3 test-scoped in fop-core-2.11.pom causes 
NoClassDefFoundError at runtime
                 Key: FOP-3296
                 URL: https://issues.apache.org/jira/browse/FOP-3296
             Project: FOP
          Issue Type: Bug
    Affects Versions: 2.11
            Reporter: Ole Sandum


After upgrading from FOP 2.10 to 2.11, applications encounter:
{code:java}
java.lang.NoClassDefFoundError: org/apache/pdfbox/io/RandomAccessRead{code}
This happens whenever FOP processes OTF or CFF fonts.

*Root cause*

fop-core-2.11.pom declares pdfbox:3.0.3 as test-scoped:
{code:xml}
<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>pdfbox</artifactId>
  <version>3.0.3</version>
  <scope>test</scope>
</dependency>{code}
However, FOP 2.11's own production classes directly reference classes from
that artifact. Inspection of the bytecode confirms:

   org.apache.fop.fonts.CFFToType1Font references
      org/apache/pdfbox/io/RandomAccessReadBuffer
      org/apache/pdfbox/io/RandomAccessRead (via CFFParser.parse signature)

   org.apache.fop.fonts.truetype.OTFFile references the same

Additionally, fontbox:3.0.3 (compile-scoped) contains classes such as
DataInputRandomAccessRead that implement org.apache.pdfbox.io.RandomAccessRead.

Since pdfbox:3.0.3 is test-scoped it is absent from consumers' runtime
classpaths, so the JVM cannot resolve RandomAccessRead when loading these
font classes.

The problem did not exist with FOP 2.10 because fontbox:2.0.27 had no
dependency on org.apache.pdfbox.io.RandomAccessRead.

*Fix*

Change the scope of pdfbox:3.0.3 in fop-core's pom from test to compile
(or runtime).

*Workaround*

Add an explicit pdfbox:3.0.3 compile-scope dependency in the consuming project.



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

Reply via email to