2012-10-16 3 views
1

JavaMail을 스프링 프레임 워크로 구성했습니다. 응용 프로그램에서 JavaMailSenderImpl을 사용했습니다. 실제로 데이터베이스에서 메일 링 등록 정보를로드하려고 시도했지만 봄 config.xml 파일에서 약간의 변경을 수행했습니다. 하지만 난있어 오류Spring JavaMailSenderImpl이 TypeMismatchException을 throw합니다.

"빈의 초기화에 실패, 상자의 예외가 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 단계 : - 난 노력하고 있어요 UCMSMailImpl 자바 클래스를 사용하여 MailSender.send로부터 메일을 보내라. 나는 UCMSMailImpl 빈을 참조했다.

<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 단계 : - 나는 센드 메일 콩

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

클래스가 인터페이스를 구현하지 않으면 인터페이스에 클래스를 할당 할 수 없습니다. UCMSMailImplMailSender을 구현하지 않습니다. 이처럼 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); 
    } 

} 

및 구성 변경 : 당신이 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); 
    } 

}

, 그것을 확장

<bean id="mailSender" class="your.package.MyUCMSMailImpl" scope="prototype" init-method="configuredProperties"> 
    <property name="javaMailImpl" ref="javaMailImpl"></property> 
</bean> 
관련 문제