Spring - конфиг apache обыкновенная электронная почта - PullRequest
2 голосов
/ 18 декабря 2009

Я хочу использовать HtmlEmail в apache commons-email в весеннем приложении, поэтому я использую config xml следующим образом:

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

Но я не могу инициализировать его из-за свойства smtpPort:

Недопустимое свойство 'smtpPort' класса бина [org.apache.commons.mail.HtmlEmail]: свойство бина 'smtpPort' недоступно для записи или имеет недопустимый метод установки. Соответствует ли тип параметра установщика возвращаемому типу получателя?

Скажите, пожалуйста, что я сделал не так? Спасибо.

1 Ответ

7 голосов
/ 18 декабря 2009

Это происходит потому, что свойство smtpPort неоднозначно - метод getSmtpPort возвращает String, а метод setSmtpPort принимает int. В этот момент Spring замирает и выдает исключение, сообщающее, что свойство bean-компонента недопустимо.

Я думаю, что здесь виноваты и HtmlEmail, и Spring - HtmlEmail за плохой дизайн API, Spring за излишнюю педантичность.

Я бы порекомендовал одно из следующих решений:

  1. Создайте свой собственный подкласс HtmlEmail, определив новый метод установки с новым именем, которое делегируется setSmtpPort. Это быстро и легко, но сам по себе довольно плохой дизайн.

  2. Напишите реализацию интерфейса Spring FactoryBean, которая позволяет создавать и настраивать экземпляр HtmlEmail. Это больше работы, чем (1), но более чистый дизайн.

  3. Ditch Commons Email полностью и используйте собственный Spring Spring слой абстракции . Это будет мой рекомендуемый вариант.

...