diff --git a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java index b348f756b3..3db85b4864 100755 --- a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java +++ b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java @@ -16,8 +16,6 @@ package org.springframework.integration.mail; -import java.util.Properties; - import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; @@ -57,24 +55,11 @@ public class ImapIdleChannelAdapter extends AbstractMessageProducingEndpoint imp this.mailReceiver = mailReceiver; } - public ImapIdleChannelAdapter(String url) { - Assert.isTrue(url.startsWith("imap"), "url must start with 'imap'"); - this.mailReceiver = new ImapMailReceiver(url); - } - public void setTaskExecutor(TaskExecutor taskExecutor) { this.taskExecutor = taskExecutor; } - public void setJavaMailProperties(Properties javaMailProperties) { - this.mailReceiver.setJavaMailProperties(javaMailProperties); - } - - public void setShouldDeleteMessages(boolean shouldDeleteMessages) { - this.mailReceiver.setShouldDeleteMessages(shouldDeleteMessages); - } - protected void handleMailMessagingException(MessagingException e) { if (logger.isWarnEnabled()) { logger.warn("error occurred in idle task", e); diff --git a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailReceivingMessageSource.java b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailReceivingMessageSource.java index a42d9c9d08..0c807742e8 100644 --- a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailReceivingMessageSource.java +++ b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailReceivingMessageSource.java @@ -51,19 +51,6 @@ public class MailReceivingMessageSource implements MessageSource receive() { try { diff --git a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/ImapIdleChannelAdapterParser.java b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/ImapIdleChannelAdapterParser.java index 8cec6707b9..ee5bddd580 100644 --- a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/ImapIdleChannelAdapterParser.java +++ b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/ImapIdleChannelAdapterParser.java @@ -19,9 +19,11 @@ package org.springframework.integration.mail.config; import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.mail.ImapIdleChannelAdapter; +import org.springframework.integration.mail.ImapMailReceiver; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -47,23 +49,30 @@ public class ImapIdleChannelAdapterParser extends AbstractSingleBeanDefinitionPa protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { String channel = element.getAttribute("channel"); - String uri = element.getAttribute("store-uri"); - String taskExecutorRef = element.getAttribute("task-executor"); - String propertiesRef = element.getAttribute("java-mail-properties"); Assert.hasText(channel, "the 'channel' attribute is required"); + builder.addConstructorArgReference(this.parseImapMailReceiver(element, parserContext)); + builder.addPropertyReference("outputChannel", channel); + String taskExecutorRef = element.getAttribute("task-executor"); + if (StringUtils.hasText(taskExecutorRef)) { + builder.addPropertyReference("taskExecutor", taskExecutorRef); + } + } + + private String parseImapMailReceiver(Element element, ParserContext parserContext) { + String uri = element.getAttribute("store-uri"); Assert.hasText(uri, "the 'store-uri' attribute is required"); Assert.isTrue(uri.toLowerCase().startsWith("imap"), "store-uri must start with 'imap' for the imap idle channel adapter"); - builder.addConstructorArgValue(uri); + BeanDefinitionBuilder receiverBuilder = BeanDefinitionBuilder.genericBeanDefinition(ImapMailReceiver.class); + receiverBuilder.addConstructorArgValue(uri); + String propertiesRef = element.getAttribute("java-mail-properties"); if (StringUtils.hasText(propertiesRef)) { - builder.addPropertyReference("javaMailProperties", propertiesRef); + receiverBuilder.addPropertyReference("javaMailProperties", propertiesRef); } - if (StringUtils.hasLength(taskExecutorRef)) { - builder.addPropertyReference("taskExecutor", taskExecutorRef); - } - builder.addPropertyValue("shouldDeleteMessages", + receiverBuilder.addPropertyValue("shouldDeleteMessages", !"false".equals(element.getAttribute("should-delete-messages"))); - builder.addPropertyReference("outputChannel", channel); + return BeanDefinitionReaderUtils.registerWithGeneratedName( + receiverBuilder.getBeanDefinition(), parserContext.getRegistry()); } } diff --git a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java index 93a2a3e9f1..2d7ebe7446 100644 --- a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java +++ b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java @@ -27,6 +27,7 @@ import org.springframework.integration.mail.MailReceiver; import org.springframework.integration.mail.MailReceivingMessageSource; import org.springframework.integration.mail.Pop3MailReceiver; import org.springframework.util.Assert; +import org.springframework.util.StringUtils; /** * Parser for the <inbound-channel-adapter> element of Spring @@ -39,23 +40,27 @@ public class MailInboundChannelAdapterParser extends AbstractPollingInboundChann @Override protected String parseSource(Element element, ParserContext parserContext) { - String uri = element.getAttribute("store-uri"); - //String propertiesRef = element.getAttribute("javaMailProperties"); - Assert.hasText(uri, "the 'store-uri' attribute is required"); - boolean isPop3 = uri.toLowerCase().startsWith("pop3"); - boolean isImap = uri.toLowerCase().startsWith("imap"); - Assert.isTrue(isPop3 || isImap, "the 'store-uri' must begin with 'pop3' or 'imap'"); - MailReceiver mailReceiver = isPop3 ? new Pop3MailReceiver(uri) : new ImapMailReceiver(uri); BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MailReceivingMessageSource.class); - /* - if (StringUtils.hasText(propertiesRef)) { - folderConnectionBuilder.addPropertyReference("javaMailProperties", - propertiesRef); - } - */ - builder.addConstructorArgValue(mailReceiver); + builder.addConstructorArgReference(this.parseMailReceiver(element, parserContext)); return BeanDefinitionReaderUtils.registerWithGeneratedName( builder.getBeanDefinition(), parserContext.getRegistry()); } + private String parseMailReceiver(Element element, ParserContext parserContext) { + String uri = element.getAttribute("store-uri"); + Assert.hasText(uri, "the 'store-uri' attribute is required"); + boolean isPop3 = uri.toLowerCase().startsWith("pop3"); + boolean isImap = uri.toLowerCase().startsWith("imap"); + Assert.isTrue(isPop3 || isImap, "the 'store-uri' must begin with 'pop3' or 'imap'"); + Class receiverClass = isPop3 ? Pop3MailReceiver.class : ImapMailReceiver.class; + BeanDefinitionBuilder receiverBuilder = BeanDefinitionBuilder.genericBeanDefinition(receiverClass); + receiverBuilder.addConstructorArgValue(uri); + String propertiesRef = element.getAttribute("java-mail-properties"); + if (StringUtils.hasText(propertiesRef)) { + receiverBuilder.addPropertyReference("javaMailProperties", propertiesRef); + } + return BeanDefinitionReaderUtils.registerWithGeneratedName( + receiverBuilder.getBeanDefinition(), parserContext.getRegistry()); + } + } diff --git a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/spring-integration-mail-1.0.xsd b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/spring-integration-mail-1.0.xsd index 55ae9c472d..24f019bcb6 100644 --- a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/spring-integration-mail-1.0.xsd +++ b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/spring-integration-mail-1.0.xsd @@ -49,6 +49,7 @@ +