当使用旧版本的JavaMail,1.4,并且JVM在启用了断言的-ea
下运行时,JavaMail始终会在与SMTP服务器的连接上抛出AssertionError
:
Caused by: java.lang.AssertionError
at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1578)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1369)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
at javax.mail.Service.connect(Service.java:251)
AssertionError
完全出乎意料,我希望连接能够正常工作,并且在没有启用JVM断言的情况下工作正常。
可以做任何事情来解决这个错误而不是放弃运行断言吗?
答案 0 :(得分:2)
您需要升级到更新或当前的JavaMail。这看起来像一个旧的bug,已经在JavaMail参考实现中得到修复,修复后的版本为1.4。
回顾SMTPTransport source code,它执行了很多断言,检查代码是否正在保持当前的监视器/锁定。其中一种方法是缺少synchronized关键字,这使得这种方法不真实,导致AssertionError
,但前提是明确启用了断言。在this revision中修复了缺少同步块的方法。
最简单的操作方法是升级到较新的JavaMail,或禁用断言。