我在我的servlet上下文中創建郵件會話,然後使用JNDI將其注入到我的Spring框架設計中。這裏的背景下的樣子:Spring - 無法轉換javax.mail.session
<Resource name="mail/session" auth="Container"
type="javax.mail.Session"
mail.smtp.from="[email protected]"
mail.smtp.user="[email protected]"
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
呃,什麼?它爲什麼試圖轉換它?
這正是它是什麼,但我不明白這將是一個問題。類加載器是否以某種方式分離實例,並比較內存中的地址? – Thom 2012-01-11 15:51:41
@Thom:Java將兩個具有相同名稱但從不同類加載器加載爲不兼容的類處理。即使它們的定義是相同的,你也不能從一個到另一個。 – skaffman 2012-01-11 16:05:23
這也解決了我的問題。我必須說這非常煩人,我正在尋找一個重複的'mail.jar',但是在使用工具並搜索'javax.mail.Session'後,我注意到Apache CXF依賴於Apache Geronimo,它擁有自己的JavaMail實現。 – g00glen00b 2014-05-19 06:23:53