2012-10-16 36 views
1

我在我的应用程序中使用JavaMailSenderImpl配置了JavaMail和Spring框架。实际上,我试图从数据库加载邮件属性,并在spring config.xml文件中做了一些更改。 但我得到的错误Spring JavaMailSenderImpl引发TypeMismatchException

“憨豆的初始化失败;嵌套的例外是 org.springframework.beans.TypeMismatchException:未能转换类型的 属性值com.core.springexamples.UCMSMailImpl]到 需要的类型[org.springframework.mail.MailSender]属性 'mailSender';嵌套异常是java.lang.IllegalArgumentException: 无法将[com.core.springexamples.UCMSMailImpl]类型的值转换为 所需的类型[org.springframework.mail .MailSender]属性 'mailSender':未找到匹配的编辑或转换策略“

无论在我的应用程序中实现了哪些更改,都在下面提到。

步骤1:

<bean id="javaMailImpl" class="org.springframework.mail.javamail.JavaMailSenderImpl"></bean> 

步骤2: -

<bean id="mailSender" class="com.core.springexamples.UCMSMailImpl" scope="prototype" init-method="configuredProperties"> 
    <property name="javaMailImpl" ref="javaMailImpl"></property> 
</bean> 

com.core.springexamples.UCMSMailImpl: -

public class UCMSMailImpl { 
    private JavaMailSenderImpl javaMailImpl; 
    private ConfigDAO configDAO; 

    public void configuredProperties(){ 
     System.out.println("UCMSMailImpl::configuredProperties"); 
     Properties props=new Properties(); 
    String[] mildata=configDAO.getMailingPropData(); 
     props.put("mail.smtp.auth", mildata[0]); 
     props.put("mail.smtp.starttls.enable", mildata[2]); 
     props.put("mail.smtp.host", mildata[3]); 
     props.put("mail.smtp.port", mildata[4]); 
     props.put("mail.smtp.host", mildata[5]); 
     props.put("username", mildata[6]); 
     props.put("password",mildata[7]); 
     getJavaMailImpl().setJavaMailProperties(props); 

    } 
    public JavaMailSenderImpl getJavaMailImpl() { 
     return javaMailImpl; 
    } 
    public void setJavaMailImpl(JavaMailSenderImpl javaMailImpl) { 
     this.javaMailImpl = javaMailImpl; 
    } 
    public void setConfigDAO(ConfigDAO configDAO){ 
    this.configDAO=configDAO; 
    } 
    public ConfigDAO getConfigDAO(){ 
    return configDAO; 
    } 

步骤3:-I正在尝试使用UCMSMailImpl java类从MailSender.send发送邮件。我提到了UCMSMailImpl bean。

<bean id="sendMail" class="com.core.springexamples.JavaMailing"> 
    <property name="mailSender" ref="mailSender"></property> 

</bean> 


public class JavaMailing { 
    private MailSender mailSender; 


    public void sendMail(String from,String to,String text,String subject){ 
     SimpleMailMessage message = new SimpleMailMessage(); 
       message.setFrom(from); 
     message.setTo(to); 
     message.setSubject(subject); 
     message.setText(text); 
     mailSender.send(message); 

    } 

    /** 
    * @return the mailSender 
    */ 
    public MailSender getMailSender() { 
     return mailSender; 
    } 

    /** 
    * @param mailSender the mailSender to set 
    */ 
    public void setMailSender(MailSender mailSender) { 
     this.mailSender = mailSender; 
    } 

第4步: - 我想测试sendmail豆

ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext-mail.xml"); 
    JavaMailing m=(JavaMailing)context.getBean("sendMail"); 
    m.sendMail("[email protected]", "[email protected]", "TEST MAIL", "TEST MAIL"); 

,但我得到的例外是TypeMismatchException:未能类型的属性值转换[com.core.springexamples.UCMSMailImpl]到所需类型[org.springframework.mail.MailSender]属性

请帮我。

回答

1

如果未实现接口,则不能为接口分配类。 UCMSMailImpl不执行MailSender。保持休息,因为它是和改变你的UCMSMailImpl这样的:

public class UCMSMailImpl implements MailSender { 

    private JavaMailSenderImpl javaMailImpl; 
    private ConfigDAO configDAO; 

    // do your property initialization 
    // ... 

    // implement interface methods 

    void send(SimpleMailMessage simpleMessage) throws MailException { 
     this.javaMailImpl.send(simpleMessage); 
    } 

    void send(SimpleMailMessage[] simpleMessages) throws MailException { 
     this.javaMailImpl.send(simpleMEssages); 
    } 

}

如果你不能改变UCMSMailImpl,扩展它:

public class MyUCMSMailImpl extends UCMSMailImpl implements MailSender { 

    void send(SimpleMailMessage simpleMessage) throws MailException { 
     this.getgetJavaMailImpl().send(simpleMessage); 
    } 

    void send(SimpleMailMessage[] simpleMessages) throws MailException { 
     this.getgetJavaMailImpl().send(simpleMEssages); 
    } 

} 

和更改配置:

<bean id="mailSender" class="your.package.MyUCMSMailImpl" scope="prototype" init-method="configuredProperties"> 
    <property name="javaMailImpl" ref="javaMailImpl"></property> 
</bean> 
相关问题