JavaMail:BODYSTRUCTURE.parseParameters中的空指针异常.这是一个错误吗?

Ste*_*ini 7 jakarta-mail nullpointerexception

我试图从IMAP帐户使用JavaMail 1.4.5获取消息,并在BODYSTRUCTURE.parseParameters方法中获得空指针异常.

查看parseParameters代码,我找到了这一行

list.set(null, "DONE"); // XXX - hack
Run Code Online (Sandbox Code Playgroud)

问题是set方法试图将.toLowerCase()调用为null值!

它试图解析的响应是这样的:

* 1 FETCH (BODYSTRUCTURE (("TEXT" "PLAIN" ("CHARSET" "us-ascii") NIL NIL "7BIT" 55 4 NIL NIL NIL NIL)(("TEXT" "HTML" ("CHARSET" "us-ascii") NIL NIL "7BIT" 410 10 NIL NIL NIL NIL)("IMAGE" "JPEG" ("NAME" "image.jpg") "<53498286-6B3E-4AC8-8CA0-481152C80968@xxxx.it>" NIL "BASE64" 536628 NIL ("inline" ("FILENAME" "image.jpg")) NIL NIL) "RELATED" ("TYPE" "text/html" "BOUNDARY" "Apple-Mail=_56FA3EC6-FB02-4882-A1C5-487652E3B4E5") NIL NIL NIL) "ALTERNATIVE" ("BOUNDARY" "Apple-Mail=_CB164992-2501-4351-94D1-61CE7C8D90DC") NIL NIL NIL))
Run Code Online (Sandbox Code Playgroud)

并且,启用调试,我得到这些消息:

DEBUG IMAP: parsing BODYSTRUCTURE 
DEBUG IMAP: msgno 1 
DEBUG IMAP: parsing multipart 
DEBUG IMAP: parsing BODYSTRUCTURE 
DEBUG IMAP: msgno    1 
DEBUG IMAP: single part 
DEBUG IMAP: type TEXT 
DEBUG IMAP: subtype    PLAIN 
DEBUG IMAP: parameter name CHARSET 
DEBUG IMAP: parameter value    us-ascii
Run Code Online (Sandbox Code Playgroud)

然后是NullPointerException

Exception in thread "main" java.lang.NullPointerException
at javax.mail.internet.ParameterList.set(ParameterList.java:165)
at com.sun.mail.imap.protocol.BODYSTRUCTURE.parseParameters(BODYSTRUCTURE.java:404)
at com.sun.mail.imap.protocol.BODYSTRUCTURE.<init>(BODYSTRUCTURE.java:224)
at com.sun.mail.imap.protocol.BODYSTRUCTURE.<init>(BODYSTRUCTURE.java:109)
at com.sun.mail.imap.protocol.FetchResponse.parse(FetchResponse.java:158)
at com.sun.mail.imap.protocol.FetchResponse.<init>(FetchResponse.java:67)
at com.sun.mail.imap.protocol.IMAPResponse.readResponse(IMAPResponse.java:136)
at com.sun.mail.imap.protocol.IMAPProtocol.readResponse(IMAPProtocol.java:270)
at com.sun.mail.iap.Protocol.command(Protocol.java:313)
at com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:1529)
at com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:1521)
at com.sun.mail.imap.protocol.IMAPProtocol.fetchBodyStructure(IMAPProtocol.java:1221)
at com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1307)
at com.sun.mail.imap.IMAPMessage.getDataHandler(IMAPMessage.java:623)
at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:927
Run Code Online (Sandbox Code Playgroud)

感谢任何可以帮助我的人!

Ste*_*ini 12

我终于找到了问题的原因.

我在我的项目中包含了Apache Cxf.

Cxf包含对geronimo-javamail_1.4_spec的引用,它覆盖了一些javamail类.

排除对geronimo的引用,一切正常!

  • 我花了很长时间寻找这个解决方案.一旦我找到你的帖子,它只花了半个小时才能让自己开始.非常感谢您花时间在这里提出问题和答案.这给我带来了巨大的变化. (3认同)

Bil*_*non 11

您可能从两个不同版本的JavaMail中混合使用了JavaMail类.检查您的类路径以查找javax.mail.*类的其他实例,可能在j2ee.jar或javaee.jar中.