GoogleCloudPlatform / GoogleCloudPlatform/appengine-java-standard

NoClassDefFoundError when parsing emails with jakarta classes

Abierto
#109 1 comentario 0 reacciones 1 asignado Reclamado por @ludoch Ver en GitHub
duplicate
Lenguaje dominante
Java
Estrellas
223
Forks
63
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

If you bring in
implementation("com.google.appengine:appengine-api-1.0-sdk:2.0.25")
and
implementation("com.sun.mail:jakarta.mail:2.0.1")
it will break when you try to parse emails.
```
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 io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:508)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:468)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:518)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:468)
at jakarta.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:613)
at jakarta.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:591)
at jakarta.activation.CommandMap.createDataContentHandler(CommandMap.java:210)
at jakarta.activation.DataHandler.getDataContentHandler(DataHandler.java:588)
at jakarta.activation.DataHandler.getContent(DataHandler.java:515)
at jakarta.mail.internet.MimeMessage.getContent(MimeMessage.java:1484)
...
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)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:518)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:468)
... 21 more
```
I'm not sure how this should be fixed. I think the mailcap file is registering some handlers that jakarta mail is trying to load. I don't see a way to differentiate between classes that should be loaded by jakarta mail vs javax mail. I really hate the javax name change.

If you add
implementation("javax.activation:activation:1.1.1")
then it says
```
java.lang.ClassCastException: class org.apache.geronimo.mail.handlers.MultipartHandler cannot be cast to class jakarta.activation.DataContentHandler (org.apache.geronimo.mail.handlers.MultipartHandler and jakarta.activation.DataContentHandler are in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @663c9e7a)
at jakarta.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:620)
at jakarta.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:591)
at jakarta.activation.CommandMap.createDataContentHandler(CommandMap.java:210)
at jakarta.activation.DataHandler.getDataContentHandler(DataHandler.java:588)
at jakarta.activation.DataHandler.getContent(DataHandler.java:515)
at jakarta.mail.internet.MimeMessage.getContent(MimeMessage.java:1484)
...
```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.