GoogleCloudPlatform / GoogleCloudPlatform/appengine-java-standard

NoClassDefFoundError when parsing emails with jakarta classes

Ouverte
#109 1 commentaire 0 réactions 1 personne assignée Réclamée par @ludoch Voir sur GitHub
duplicate
Langage dominant
Java
Étoiles
223
Forks
63
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

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)
...
```

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.