Весна - не может конвертировать javax.mail.session - PullRequest
7 голосов
/ 11 января 2012

Я создаю почтовый сеанс внутри контекста моего сервлета, а затем использую JNDI, чтобы внедрить его в мой весенний фреймворк.Вот как выглядит контекст:

<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>

и где я внедряю его в отправителя весенней почты 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

Э-э, что?Почему он пытается конвертировать это?

Ответы [ 2 ]

19 голосов
/ 11 января 2012

Скорее всего, у вас есть две копии, если javax.mail.Session на вашем пути к классам. Одна, вероятно, происходит из внутренних библиотек сервера приложений, другая, вероятно, упакована в каталог lib вашего приложения. Две копии будут конфликтовать, когда вы попытаетесь использовать их следующим образом.

Удалите файл из каталога lib вашего приложения и повторите попытку.

3 голосов
/ 11 января 2012

Это проблема загрузки классов.Обычно это происходит потому, что класс находится в банке на вашем сервере и в вашем приложении.В этом случае вы, вероятно, захотите удалить его из своего приложения.У вас есть что-то вроде mail.jar в вашем WEB-INF / lib или EAR?

...