У меня есть приложение Spring Integration, состоящее из почтового входящего адаптера, настроенного в контексте моего приложения для опроса почтового ящика POP3 для обработки электронных писем, содержащих вложения больших файлов XML.
У меня есть класс обработчика (активатор службы) для извлечения вложений из каждого сообщения электронной почты, которое передается адаптером входящего канала почты.
Эта настройка прекрасно работает в нашем текущем производственном приложении, использующем Spring Integration 2.1. Теперь у нас есть требование для перехода на Spring Integration 5.1.4, и это же приложение выдает ошибку в процессе извлечения вложений из сообщения электронной почты. Пожалуйста, обратитесь к фрагменту исходного кода 2
Эта установка прекрасно работает с версией Spring Integration 2.1, но обнаруживает ошибку в Spring Integration 5.1.4, указывающую на то, что папка почтового ящика не открыта. Исключение составляет
processMsg(): Mail messaging error processing message javax.mail.MessagingException: No inputstream from datasource;
вложенное исключение:
java.lang.IllegalStateException: папка не открыта
Spring Integration Configuration
<int:channel id="emailInputChannel"/>
<int-mail:inbound-channel-adapter id="pop3EmailAdapter" store-uri="pop3:// ${pop3.user}:${pop3.pwd}@${pop3.server.host}/Inbox"
channel="emailInputChannel" should-delete-messages="true" auto-startup="true"
java-mail-properties="javaMailProperties">
<int:poller max-messages-per-poll="1" fixed-delay="${email.poller.rate}" />
</int-mail:inbound-channel-adapter>
<!-- Java Mail POP3 properties -->
<util:properties id="javaMailProperties">
<beans:prop key="mail.debug">true</beans:prop>
<beans:prop key="mail.pop3.port">${pop3.server.port}</beans:prop>
</util:properties>
<!-- Email Handler configuration -->
<si:service-activator id="emailAttachmentsHandler"
input-channel="emailInputChannel" ref="emailMessageHandler" method="extractEmailAttachments">
</si:service-activator>
<beans:bean id="emailMessageHandler" class="EmailMessageHandler"/>
Обработчик сообщений электронной почты Фрагмент исходного кода Java 2
public List<org.springframework.messaging.Message<?>> extractEmailAttachments(Message emailMsg) throws Exception {
List<org.springframework.messaging.Message<?>> attachmentList = null;
logger.info("LookoutEmailAttachmentSplitter.extractEmailAttachments: Received Message: " + emailMsg);
attachmentList = processMsg(emailMsg);
}
private List<org.springframework.messaging.Message<?>> processMsg(javax.mail.Message emailMsg) throws MessagingException {
int max;
Multipart mp;
Object content;
try {
// getting the contents of the message
logger.info("processMsg(): Message: " + emailMsg);
content = emailMsg.getContent();
// Check the content to verify if it has multipart attachments.
if (!(content instanceof Multipart))
return attachmentList;
}
catch (Exception ex){
logger.info("processMsg(): Error: " + ex.getMessage());
}
}