2009-12-18 6 views
2

Je veux utiliser HtmlEmail dans apache commons-email dans une application de printemps, donc j'utiliser le fichier XML de configuration comme suit:Spring - config communes apache email

<bean id="commonsEmail" class="org.apache.commons.mail.HtmlEmail"> 
    <property name="hostName" value="smtp.example.com" /> 
    <property name="TLS" value="true"/> 
    <property name="smtpPort" value="587"/> 
</bean> 

Mais je ne peux pas l'initialiser à cause de la Propriété smtpPort:

Propriété non valide 'smtpPort' de la classe bean [org.apache.commons.mail.HtmlEmail]: La propriété bean 'smtpPort' n'est pas accessible en écriture ou possède une méthode setter non valide. Le type de paramètre du setter correspond-il au type de retour du getter?

S'il vous plaît dites-moi ce que j'ai mal fait? Je vous remercie.

Répondre

7

Ce qui se passe parce que la propriété smtpPort est ambigu - la méthode getSmtpPort renvoie une String, mais la méthode setSmtpPort prend un int. Le printemps se refroidit à ce point et jette l'exception en disant que la propriété du haricot est invalide.

Je pense que les deux HtmlEmail et le printemps sont en faute ici - HtmlEmail pour la conception de l'API, le printemps pour être inutilement pédantes.

La solution que je vous recommande est l'un:

  1. Créer votre propre sous-classe de HtmlEmail, la définition d'une nouvelle méthode setter, avec un nouveau nom, qui délègue à setSmtpPort. C'est rapide et facile, mais est plutôt mauvais design en soi.

  2. Write an implementation de l'interface de printemps FactoryBean, qui obtient le travail de l'instanciation et la configuration d'une instance HtmlEmail. C'est plus de travail que (1), mais est une conception plus propre.

  3. Ditch Commons Email complètement, et utiliser Spring's own Email abstraction layer. Ce serait mon option recommandée.

Questions connexes