У меня проблемы с использованием пакета javax.mail на AWS Lambda.
При попытке получить содержимое письма метод getContent () возвращает объект MimeMultipart
при локальном запуске.При запуске, смонтированном в образе AWS lambda java8 docker, он возвращает IMAPInputStream
.
Я видел решения этого, которые включают установку загрузчика классов в текущем потоке, например: Thread.currentThread().setContextClassLoader(this.class.getClassLoader());
Однако это не сработало для меня.Загрузчик классов при локальном запуске отличается от загрузчика классов при работе с образом док-станции lambda java8.Local: sun.misc.Launcher$AppClassLoader
Docker: java.net.URLClassLoader
Я попытался явно загрузить класс с помощью системного загрузчика классов sun.misc.Launcher$AppClassLoader
следующим образом:
Class c = java.lang.ClassLoader.getSystemClassLoader().loadClass("helpers.MailReader");
MailReader mail = (MailReader)c.newInstance();
Это прекрасно работает при локальном запуске, носнова происходит сбой в образе докера с этим:
java.lang.ClassNotFoundException: helpers.MailReader
Так что в загрузчике системных классов во всех средах есть что-то другое.Я не так много знаю о Java, и мне кажется, что я просто упускаю что-то простое и усложняю ситуацию.В чем может быть разница в средах, которые могут это создавать?
РЕДАКТИРОВАТЬ: отладочный вывод из javax.activation.debug:
MailcapCommandMap: load HOME
new MailcapFile: file /home/sbx_user1051/.mailcap
MailcapCommandMap: load SYS
new MailcapFile: file /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.32.amzn1.x86_64/jre/lib/mailcap
MailcapCommandMap: load JAR
MailcapCommandMap: getResources
MailcapCommandMap: URL file:/var/task/META-INF/mailcap
new MailcapFile: InputStream
parse: text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain
Type: text/plain
Command: content-handler, Class: com.sun.mail.handlers.text_plain
parse: text/html;; x-java-content-handler=com.sun.mail.handlers.text_html
Type: text/html
Command: content-handler, Class: com.sun.mail.handlers.text_html
parse: text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml
Type: text/xml
Command: content-handler, Class: com.sun.mail.handlers.text_xml
parse: multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed; x-java-fallback-entry=true
Type: multipart/*
Command: content-handler, Class: com.sun.mail.handlers.multipart_mixed
parse: message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822
Type: message/rfc822
Command: content-handler, Class: com.sun.mail.handlers.message_rfc822
MailcapCommandMap: successfully loaded mailcap file from URL: file:/var/task/META-INF/mailcap
MailcapCommandMap: load DEF
new MailcapFile: InputStream
parse: image/gif;; x-java-view=com.sun.activation.viewers.ImageViewer
Type: image/gif
Command: view, Class: com.sun.activation.viewers.ImageViewer
parse: image/jpeg;; x-java-view=com.sun.activation.viewers.ImageViewer
Type: image/jpeg
Command: view, Class: com.sun.activation.viewers.ImageViewer
parse: text/*;; x-java-view=com.sun.activation.viewers.TextViewer
Type: text/*
Command: view, Class: com.sun.activation.viewers.TextViewer
parse: text/*;; x-java-edit=com.sun.activation.viewers.TextEditor
Type: text/*
Command: edit, Class: com.sun.activation.viewers.TextEditor
Merging commands for type text/*
MailcapCommandMap: successfully loaded mailcap file: /META-INF/mailcap.default
MailcapCommandMap: createDataContentHandler for multipart/alternative
search DB #1
search DB #2
search fallback DB #1
got content-handler
class com.sun.mail.handlers.multipart_mixed
Can't load DCH com.sun.mail.handlers.multipart_mixed; Exception: java.lang.ClassNotFoundException: com/sun/mail/handlers/multipart_mixed
search fallback DB #2
Нет решений, которые я нашел в Интернете, связанных с этим, помогло