OiO.lk Blog java After migration to Jakarta: java.lang.NoClassDefFoundError: javax/activation/DataContentHandler
java

After migration to Jakarta: java.lang.NoClassDefFoundError: javax/activation/DataContentHandler


I have module that used javax.mail and javax.activation. Now I moved to Jakarta. I updated the dependencies and all the imports.

When I run it locally it runs fine, but when running it in Docker container I have the following error:

java.lang.NoClassDefFoundError: javax/activation/DataContentHandler
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
    at jakarta.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:594)
    at jakarta.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:572)
    at jakarta.activation.CommandMap.createDataContentHandler(CommandMap.java:205)
    at jakarta.activation.DataHandler.getDataContentHandler(DataHandler.java:587)
    at jakarta.activation.DataHandler.getContent(DataHandler.java:514)
    at jakarta.mail.internet.MimeMessage.getContent(MimeMessage.java:1504)
    at org.assimbly.mail.component.mail.MailBinding.extractBodyFromMail(MailBinding.java:302)
    at org.assimbly.mail.component.mail.MailMessage.createBody(MailMessage.java:93)
    at org.apache.camel.support.MessageSupport.getBody(MessageSupport.java:68)
    at org.assimbly.mail.component.mail.MailConsumer.createExchange(MailConsumer.java:406)
    at org.assimbly.mail.component.mail.MailConsumer.retrieveMessages(MailConsumer.java:328)
    at org.assimbly.mail.component.mail.MailConsumer.poll(MailConsumer.java:164)
    at org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:205)
    at org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:119)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
    at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.ClassNotFoundException: javax.activation.DataContentHandler
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
    ... 38 common frames omitted

In the error there is a reference to Jakarta classes that are called, but at the end it refers to javax.activation not found. I checked the dependency tree, and there are no references outside of Jakarta. I also try to force to use Jakarta in Gradle, but with the same result.

How can I find out what causing it to still call javax?



You need to sign in to view this answers

Exit mobile version