Spring--无法转换javax.mail.session
我正在servlet上下文中创建一个邮件会话,然后使用JNDI将其注入到spring框架设计中。以下是上下文的外观: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"
<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