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

Spring--无法转换javax.mail.session,java,spring,tomcat,jakarta-mail,Java,Spring,Tomcat,Jakarta Mail,我正在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"

我正在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"
/>

嗯,什么????为什么它试图转换它?

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


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

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

在我的例子中有两个jar- jar和geronimo-javamail_1.4_mail-1.8.4.jar

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

如果您不确定这个javax.mail.Session类可能存在于哪些其他JAR中,您可以使用下面的命令来查找

forfiles/S/M*.jar/C“cmd/cjar-tvf@file | findstr/C:“Session”和&echo@path”


Session指的是类Session我们正在搜索的

就是这个,但我不知道这会是个问题。是不是类加载器以某种方式分离了实例并比较了内存中的地址?@Thom:Java将两个名称相同但从不同类加载器加载的类视为不兼容的。你不能从一个转换到另一个,即使它们的定义相同。这也解决了我的问题。我必须说这很烦人,我正在寻找一个重复的
mail.jar
,但是在使用工具并搜索
javax.mail.Session
之后,我注意到Apache CXF依赖于Apache Geronimo,它有自己的JavaMail实现。对我来说也是Apache CXF!你能给ApacheCXF的jar命名吗?我也面临同样的问题。Mail.jar和mailapi.jar都仅在tomcat/lib中。我已经从web inf/lib中删除了,但我仍然面临着这个问题。我也面临着同样的问题。Mail.jar和mailapi.jar都仅在tomcat/lib中。我已经从web inf/lib中删除了,但仍然面临这个问题。
  <bean id="smtpSession" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/mail/session"/>
  </bean>
  <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