加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么Tomcat找不到SMTPTransport(Session,URLName)?

发布时间:2020-12-15 00:40:43 所属栏目:Java 来源:网络整理
导读:我们有一个发送邮件的Web应用程序.由于某种原因,它的安装已经决定它找不到带有(Session,URLName)参数的SMTPTransport的构造函数. 堆栈跟踪的相关位: javax.mail.NoSuchProviderException: Provider class does not have a constructor(Session,URLName): pr
我们有一个发送邮件的Web应用程序.由于某种原因,它的安装已经决定它找不到带有(Session,URLName)参数的SMTPTransport的构造函数.

堆栈跟踪的相关位:

javax.mail.NoSuchProviderException: Provider class does not have a constructor(Session,URLName): protocol=smtp; type=javax.mail.Provider$Type@1dedf78; class=com.sun.mail.smtp.SMTPTransport; vendor=Sun Microsystems,Inc
        at javax.mail.Session.getService(Session.java:499)
        at javax.mail.Session.getTransport(Session.java:387)
        at javax.mail.Session.getTransport(Session.java:347)
        at javax.mail.Session.getTransport(Session.java:376)
        at javax.mail.Transport.send(Transport.java:67)
        at javax.mail.Transport.send(Transport.java:48)
...
Caused by: java.lang.NoSuchMethodException: com.sun.mail.smtp.SMTPTransport.<init>(javax.mail.Session,javax.mail.URLName)
        at java.lang.Class.getConstructor0(Class.java:2706)
        at java.lang.Class.getConstructor(Class.java:1657)
        at javax.mail.Session.getService(Session.java:496)
        ... 8 more

我们已经检查过SMTPTransport确实存在于类路径中(这并不奇怪,因为我们没有得到ClassNotFoundException),并且它是类路径中该类的唯一副本.它在tomcat / lib中.我们的webapp不包含副本. $JAVA_HOME / jre / lib中没有重复项.

我甚至已经反过来反编译该类以验证它实际上确实有问题的构造函数.

我做了一些谷歌搜索,发现其他人有seen the same error,但没有解决问题.

解决方法

我的同事和我弄清楚了为什么我们看到这个.我在这里发布了它:
https://plus.google.com/105513684958738872125/posts/LBnjehZoss6

综上所述:

虽然我正在寻找一个重复的SMTPTransport类,但没有找到.真正的罪魁祸首是一个重复的javax.mail.Session类,它已被添加到我的webapp中.这导致Tomcat的分层类加载器出现问题.

当in-webapp Session类试图将自己传递给Tomcat级别的SMTPTransport时,那个人没有认识到Session类型(由不同的类加载器加载)作为其构造函数所需的类型.

从webapp中删除重复的javax.mail类可以解决问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读