启用断言时,JavaMail 1.4始终抛出AssertionError(-ea)

时间:2015-05-05 05:39:21

标签: java javamail assertions

当使用旧版本的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断言的情况下工作正常。

可以做任何事情来解决这个错误而不是放弃运行断言吗?

1 个答案:

答案 0 :(得分:2)

您需要升级到更新或当前的JavaMail。这看起来像一个旧的bug,已经在JavaMail参考实现中得到修复,修复后的版本为1.4。

回顾SMTPTransport source code,它执行了很多断言,检查代码是否正在保持当前的监视器/锁定。其中一种方法是缺少synchronized关键字,这使得这种方法不真实,导致AssertionError,但前提是明确启用了断言。在this revision中修复了缺少同步块的方法。

最简单的操作方法是升级到较新的JavaMail,或禁用断言。

另见JIRA knowledge base