为了账号安全,请及时绑定邮箱和手机立即绑定

Tomcat类路径加载器javax.mail.Session与spring-boot

Tomcat类路径加载器javax.mail.Session与spring-boot

SMILET 2023-03-23 14:59:23
尝试在 Tomcat(不是嵌入式 Tomcat)上部署 Spring Boot 应用程序。我已经在 Tomcat 服务器配置上配置了一个 Java 邮件会话,并且我正在尝试在我的应用程序中将其作为 JNDI 值进行访问。出于某种原因,我的应用程序出错并显示:Caused by: java.lang.IllegalArgumentException: The local resource link [support] that refers to global resource [mail/support] was expected to return an instance of [javax.mail.Session] but returned an instance of [javax.mail.Session]        at org.apache.naming.factory.ResourceLinkFactory.getObjectInstance(ResourceLinkFactory.java:163)        at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)        at org.apache.naming.NamingContext.lookup(NamingContext.java:840)我已经包含javax.mail.jar在 Tomcat/lib文件夹中。我也spring-boot-starter-mail包括在我的pom.xml我试过javax.mail.jar从 Tomcat 的库中删除,但这会导致 Tomcat 启动时出错,因为它无法创建邮件会话。我也试过删除 spring-boot-starter-mail,但这会干扰我的一些需要 JavaMailSender 和其他邮件组件的代码。我试过弄乱 JNDI 导入和类似的东西,但无济于事。我还尝试检查 包含的邮件 jar 的版本spring-boot-starter-mail,并更新 Tomcat 中的 jar 以匹配。我还检查了 Maven 中的传递依赖项,看看是否引入了不同的邮件实现,但什么也没有。所以我有点没主意了。这是我在我的 web.xml 中获取 JNDI 值的地方:<resource-ref>        <description>The mail session configured in Tomcat</description>        <res-ref-name>mail/support</res-ref-name>        <res-type>javax.mail.Session</res-type>        <res-auth>Container</res-auth>    </resource-ref>这是我在 Tomcat 中配置的内容server.xml:<GlobalNamingResources><Resource name="mail/support"              auth="Container"              type="javax.mail.Session"              mail.smtp.host="smtp.XXX.XXX"              mail.smtp.user="support"              mail.smtp.from="support@XXX.org" /></GlobalNamingResources>这是 context.xml 中的内容:<Context><ResourceLink global="mail/support" name="mail/support" type="javax.mail.Session" /></Context>我希望能够使用spring-boot-starter-mail和使用全局配置的 JNDI 邮件会话。我不知道这些是否只是不相容的愿望,但我不明白为什么会这样。
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

好的,所以解决方案确实是@Bill Shannon 建议的。我必须将com.sun.mail依赖项包含在 Mavenprovided范围内。我的特殊问题是该项目已经在使用spring-boot-starter-mail依赖项,其中包括com.sun.mailjar。所以我不得不从我的 Maven 依赖中排除它。因此,与邮件内容相关的完整 Maven 依赖项如下所示:


<dependency>

    <groupId>com.sun.mail</groupId>

    <artifactId>javax.mail</artifactId>

    <version>1.5.6</version>

    <scope>provided</scope>

</dependency>

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-mail</artifactId>

    <exclusions>

        <exclusion>

            <groupId>com.sun.mail</groupId>

            <artifactId>javax.mail</artifactId>

        </exclusion>

    </exclusions>

</dependency>

现在看起来有点明显了。我认为我的主要困惑来源是奇怪的 Tomcat 错误消息。感谢任何看过此内容的人,希望这可以解决其他人的问题!


查看完整回答
反对 回复 2023-03-23
  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信