quarkus

veraPDF failing in Quarkus due to missing class - why only in dev mode?


I'm trying to use veraPDF within a Quarkus project. Due to other dependencies, this can't be run as a native image, so it's JVM only.

If I run my tests within the build, everything runs fine. However, starting in dev mode and trying to validate a PDF gives me an error:

org.jboss.resteasy.spi.UnhandledException: java.lang.NoClassDefFoundError: Could not initialize class org.verapdf.pdfa.validation.profiles.ProfileDirectoryImpl
...
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoClassDefFoundError: javax/activation/DataSource [in thread \"executor-thread-1\"]
at com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.<clinit>(RuntimeBuiltinLeafInfoImpl.java:444)
at com.sun.xml.bind.v2.model.impl.RuntimeTypeInfoSetImpl.<init>(RuntimeTypeInfoSetImpl.java:33)
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.java:98)
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.java:54)
at com.sun.xml.bind.v2.model.impl.ModelBuilder.<init>(ModelBuilder.java:132)
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.<init>(RuntimeModelBuilder.java:62)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:425)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:273)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:109)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1126)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:135)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:288)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:277)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:400)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
at org.verapdf.core.XmlSerialiser.typeFromXml(XmlSerialiser.java:133)
at org.verapdf.core.XmlSerialiser.typeFromXml(XmlSerialiser.java:118)
at org.verapdf.pdfa.validation.profiles.Profiles.profileFromXml(Profiles.java:470)
at org.verapdf.pdfa.validation.profiles.ProfileDirectoryImpl.makeVeraProfileDir(ProfileDirectoryImpl.java:151)
at org.verapdf.pdfa.validation.profiles.ProfileDirectoryImpl.<clinit>(ProfileDirectoryImpl.java:48)

I then added javax.activation:javax.activation-api:1.2.0 to my POM. When I output the classpath, I do see it in the test. However, it's not present when I look into the Dev JAR's MANIFEST.MF. Why does Quarkus kick it out of my dependencies?

Has anyone tried to use veraPDF within Quarkus?


Solution

  • You can try using other veraPDF dependency, which depends on jakarta instead of javax. It is described here.