Estoy creando una sesión de correo dentro de mi contexto de servlet y luego usando JNDI para inyectarlo en mi diseño de Spring Framework. Así es como se ve el contexto:Spring - no se puede convertir 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"
/>
Y dónde estoy trayendo en:
<bean id="smtpSession" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/mail/session"/>
</bean>
y donde yo estoy inyectarlo en el correo java primavera remitente:
<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>
Ahora aquí está el mensaje que recibo:
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
Uh, ¿qué ??? ¿Por qué está tratando de convertirlo?
Eso es exactamente lo que era, pero no entendí que esto sería un problema. ¿Es que el cargador de clases separa las instancias de alguna manera y está comparando la dirección en la memoria? – Thom
@Thom: Java trata dos clases con el mismo nombre pero cargadas desde diferentes cargadores de clases como incompatibles. No se puede transmitir de uno a otro, incluso si sus definiciones son idénticas. – skaffman
Esto resolvió mi problema también. Debo decir que fue bastante molesto, estaba buscando un 'mail.jar' duplicado, pero después de usar una herramienta y buscar' javax.mail.Session' noté que Apache CXF depende de Apache Geronimo, que tiene su propia implementación JavaMail . – g00glen00b