当使用旧版本的JavaMail 1.4,并且JVM运行具有assertions-enabled的JVM时-ea
,JavaMail始终会AssertionError
与SMTP服务器建立连接:
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断言的情况下也可以正常工作。
除了放弃使用断言运行之外,可以采取任何其他措施来解决此错误吗?
您需要升级到新的或最新的JavaMail。这看起来像一个旧错误,此错误已在JavaMail参考实现中得到修复,修复版本为1.4。
查看SMTPTransport源代码,它执行许多断言,检查代码是否将当前监视器/锁保持在其自身上。其中一种方法丢失了synced关键字,使之不成立,从而导致AssertionError
,但仅在显式启用断言的情况下。看起来缺少同步块的方法已在此修订版中修复。
最简单的操作是升级到较新的JavaMail或禁用断言。
另请参见JIRA知识库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句