GoogleCloudPlatform / GoogleCloudPlatform/appengine-java-standard

NoClassDefFoundError when parsing emails with jakarta classes

Đang mở
#109 1 bình luận 0 reaction 1 người được giao Được @ludoch nhận Xem trên GitHub
duplicate
Ngôn ngữ chính
Java
Star
223
Fork
63
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.