1

アプリケーションでJavaMailSenderImplを使用してSpringフレームワークでJavaMailを構成しました。実際には、データベースからメーリングプロパティをロードしようとし、Spring config.xmlファイルで少し変更を加えました。しかし、私はエラーが発生しました

「Bean の初期化に失敗しました。ネストされた例外は org.springframework.beans.TypeMismatchException です: タイプ [com.core.springexamples.UCMSMailImpl] のプロパティ値をプロパティ 'mailSender' の必要なタイプ [org.springframework.mail.MailSender] に変換できませんでした」 ; ネストされた例外は java.lang.IllegalArgumentException: タイプ [com.core.springexamples.UCMSMailImpl] の値をプロパティ 'mailSender' の必要なタイプ [org.springframework.mail.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 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 Bean をテストしようとしています

ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext-mail.xml");
    JavaMailing m=(JavaMailing)context.getBean("sendMail");
   m.sendMail("john.ch@gmail.com", "john.c@gmail.com", "TEST MAIL", "TEST MAIL");

しかし、例外は TypeMismatchException: Failed to convert property value of type [com.core.springexamples.UCMSMailImpl] to required type [org.springframework.mail.MailSender] for property

私を助けてください。

4

1 に答える 1

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>
于 2012-10-16T11:09:19.540 に答える