繁体   English   中英

Spring--无法转换 javax.mail.session

[英]Spring--cannot convert javax.mail.session

我正在我的 servlet 上下文中创建一个邮件会话,然后使用 JNDI 将它注入到我的 spring 框架设计中。 以下是上下文的外观:

<Resource name="mail/session" auth="Container"
            type="javax.mail.Session"
            mail.smtp.from="noreply@xxxx.com"
            mail.smtp.user="noreply@xxxx.com"
            mail.smtp.auth="true"
            mail.smtp.starttls.enable="true"
/>

我把它带进来的地方:

  <bean id="smtpSession" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/mail/session"/>
  </bean>

以及我将它注入 spring java邮件发件人的地方:

  <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
      <property name="host" ref="smtpHost"/>
      <property name="password" ref="smtpPassword"/>
      <property name="port" ref="smtpPort"/>
      <property name="username" ref="smtpFrom"/>
      <property name="session" ref="smtpSession"/>
  </bean>

现在这是我收到的消息:

Caused by: java.lang.IllegalStateException: Cannot convert value of type [javax.
mail.Session] to required type [javax.mail.Session] for property 'session': no m
atching editors or conversion strategy found
        at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(Ty
peConverterDelegate.java:231)
        at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrap
perImpl.java:447)
        ... 51 more

呃,什么??? 为什么要尝试转换它?

如果javax.mail.Session在您的类路径上,您很可能有两个副本。 一个可能来自应用程序服务器的内部库,另一个可能包含在您的应用程序的lib目录中。 当您尝试像这样使用它们时,这两个副本会发生冲突。

删除应用程序的lib目录中的那个,然后重试。

这是一个类加载问题。 通常这是因为该类同时位于服务器应用程序中的 jar 中。 在这种情况下,您可能希望将其从应用程序中删除。 你的 WEB-INF/lib 或 EAR 中有类似mail.jar 的东西吗?

就我而言,有 2 个 jars-mail.jar 和 geronimo-javamail_1.4_mail-1.8.4.jar。

只有在从我的应用程序的 lib 中删除两者并将 mail.jar 放入服务器的 lib 后,错误才得以解决。

如果您不确定还有哪些其他 jar 可以包含此 javax.mail.Session 类,您可以使用以下命令进行查找。

forfiles /S /M *.jar /C "cmd /c jar -tvf @file | findstr /C:"Session" && echo @path"

会议指的是一堂课,我们正在寻找

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM