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?
You can try using other veraPDF dependency, which depends on jakarta instead of javax. It is described here.