From bf151ac50ad19e18b9c55fe784dc89a273101c8f Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Mon, 22 Sep 2008 18:51:34 +0000 Subject: [PATCH] MailTarget is now MailSendingMessageConsumer, and the "integration/mail" namespace now defines an "outbound-channel-adapter" element. --- ...t.java => MailSendingMessageConsumer.java} | 13 +++---- .../mail/config/MailNamespaceHandler.java | 2 +- ... => MailOutboundChannelAdapterParser.java} | 25 ++++++------ .../config/spring-integration-mail-1.0.xsd | 10 ++--- ...ilSendingMessageConsumerContextTests.java} | 18 ++++----- ...a => MailSendingMessageConsumerTests.java} | 31 +++++++-------- ...ailOutboundChannelAdapterParserTests.java} | 38 +++++++++++-------- ...mailOutboundChannelAdapterParserTests.xml} | 15 ++++---- ...ailSendingMessageConsumerContextTests.xml} | 2 +- 9 files changed, 78 insertions(+), 76 deletions(-) rename org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/{MailTarget.java => MailSendingMessageConsumer.java} (92%) rename org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/{MailTargetParser.java => MailOutboundChannelAdapterParser.java} (75%) rename org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/{MailTargetContextTests.java => MailSendingMessageConsumerContextTests.java} (83%) rename org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/{MailTargetTests.java => MailSendingMessageConsumerTests.java} (88%) rename org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/{MailTargetParserTests.java => MailOutboundChannelAdapterParserTests.java} (57%) rename org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/{mailTargetParserTests.xml => mailOutboundChannelAdapterParserTests.xml} (71%) rename org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/{mailTarget.xml => mailSendingMessageConsumerContextTests.xml} (94%) diff --git a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailTarget.java b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailSendingMessageConsumer.java similarity index 92% rename from org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailTarget.java rename to org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailSendingMessageConsumer.java index 0ab21d11f6..bf3a366011 100644 --- a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailTarget.java +++ b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailSendingMessageConsumer.java @@ -18,8 +18,8 @@ package org.springframework.integration.mail; import org.springframework.beans.factory.InitializingBean; import org.springframework.integration.message.Message; +import org.springframework.integration.message.MessageConsumer; import org.springframework.integration.message.MessageMapper; -import org.springframework.integration.message.MessageTarget; import org.springframework.mail.MailMessage; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; @@ -27,12 +27,12 @@ import org.springframework.mail.javamail.MimeMailMessage; import org.springframework.util.Assert; /** - * A target adapter for sending mail. + * A {@link MessageConsumer} implementation for sending mail. * * @author Marius Bogoevici * @author Mark Fisher */ -public class MailTarget implements MessageTarget, InitializingBean { +public class MailSendingMessageConsumer implements MessageConsumer, InitializingBean { private final JavaMailSender mailSender; @@ -46,12 +46,12 @@ public class MailTarget implements MessageTarget, InitializingBean { /** - * Create a MailTargetAdapter. + * Create a MailSendingMessageConsumer. * * @param mailSender the {@link JavaMailSender} instance to which this * adapter will delegate. */ - public MailTarget(JavaMailSender mailSender) { + public MailSendingMessageConsumer(JavaMailSender mailSender) { Assert.notNull(mailSender, "'mailSender' must not be null"); this.mailSender = mailSender; } @@ -83,11 +83,10 @@ public class MailTarget implements MessageTarget, InitializingBean { this.objectMessageMapper = objectMessageMapper; } - public final boolean send(Message message) { + public final void onMessage(Message message) { MailMessage mailMessage = this.convertMessageToMailMessage(message); this.mailHeaderGenerator.populateMailMessageHeader(mailMessage, message); this.sendMailMessage(mailMessage); - return true; } @SuppressWarnings("unchecked") diff --git a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailNamespaceHandler.java b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailNamespaceHandler.java index a28c57d3e0..1abdf272d9 100644 --- a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailNamespaceHandler.java +++ b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailNamespaceHandler.java @@ -26,7 +26,7 @@ import org.springframework.beans.factory.xml.NamespaceHandlerSupport; public class MailNamespaceHandler extends NamespaceHandlerSupport { public void init() { - this.registerBeanDefinitionParser("mail-target", new MailTargetParser()); + this.registerBeanDefinitionParser("outbound-channel-adapter", new MailOutboundChannelAdapterParser()); this.registerBeanDefinitionParser("polling-mail-source", new PollingMailSourceParser()); this.registerBeanDefinitionParser("imap-idle-mail-source", new SubscribableImapIdleMailSourceParser()); } diff --git a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailTargetParser.java b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailOutboundChannelAdapterParser.java similarity index 75% rename from org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailTargetParser.java rename to org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailOutboundChannelAdapterParser.java index a87050ccd9..d728fd9ab0 100644 --- a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailTargetParser.java +++ b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/config/MailOutboundChannelAdapterParser.java @@ -19,33 +19,28 @@ package org.springframework.integration.mail.config; import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.ConfigurationException; -import org.springframework.integration.mail.MailTarget; +import org.springframework.integration.config.AbstractOutboundChannelAdapterParser; +import org.springframework.integration.mail.MailSendingMessageConsumer; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.util.StringUtils; /** - * Parser for the <mail-target/> element. + * Parser for the <outbound-channel-adapter/> element of the 'mail' namespace. * * @author Mark Fisher */ -public class MailTargetParser extends AbstractSingleBeanDefinitionParser { +public class MailOutboundChannelAdapterParser extends AbstractOutboundChannelAdapterParser { protected Class getBeanClass(Element element) { - return MailTarget.class; + return MailSendingMessageConsumer.class; } - protected boolean shouldGenerateId() { - return false; - } - - protected boolean shouldGenerateIdAsFallback() { - return true; - } - - protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + @Override + protected String parseConsumer(Element element, ParserContext parserContext) { + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MailSendingMessageConsumer.class); String mailSenderRef = element.getAttribute("mail-sender"); String host = element.getAttribute("host"); String username = element.getAttribute("username"); @@ -75,6 +70,8 @@ public class MailTargetParser extends AbstractSingleBeanDefinitionParser { if (StringUtils.hasText(headerGeneratorRef)) { builder.addPropertyReference("headerGenerator", headerGeneratorRef); } + return BeanDefinitionReaderUtils.registerWithGeneratedName( + builder.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 82aeb80768..a3979f5033 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 @@ -16,11 +16,11 @@ ]]> - + - Defines a mail-sending target. + Defines an outbound mail-sending Channel Adapter. @@ -31,7 +31,7 @@ - + @@ -44,12 +44,12 @@ - + - Defines a polling mail source. + Defines an IMAP mail source. diff --git a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailTargetContextTests.java b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailSendingMessageConsumerContextTests.java similarity index 83% rename from org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailTargetContextTests.java rename to org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailSendingMessageConsumerContextTests.java index 390fb8c5f8..ed10c2f814 100644 --- a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailTargetContextTests.java +++ b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailSendingMessageConsumerContextTests.java @@ -31,7 +31,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.integration.mail.MailTarget; +import org.springframework.integration.mail.MailSendingMessageConsumer; import org.springframework.integration.message.GenericMessage; import org.springframework.integration.message.StringMessage; import org.springframework.mail.SimpleMailMessage; @@ -42,11 +42,11 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * @author Marius Bogoevici */ @RunWith(value = SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = {"classpath:/org/springframework/integration/mail/mailTarget.xml"}) -public class MailTargetContextTests { +@ContextConfiguration(locations = {"classpath:/org/springframework/integration/mail/mailSendingMessageConsumerContextTests.xml"}) +public class MailSendingMessageConsumerContextTests { @Autowired - private MailTarget mailTarget; + private MailSendingMessageConsumer consumer; @Autowired private StubJavaMailSender mailSender; @@ -59,7 +59,7 @@ public class MailTargetContextTests { @Test public void testStringMesssagesWithConfiguration() { - this.mailTarget.send(new StringMessage(MailTestsHelper.MESSAGE_TEXT)); + this.consumer.onMessage(new StringMessage(MailTestsHelper.MESSAGE_TEXT)); SimpleMailMessage message = MailTestsHelper.createSimpleMailMessage(); assertEquals("no mime message should have been sent", 0, this.mailSender.getSentMimeMessages().size()); @@ -72,13 +72,13 @@ public class MailTargetContextTests { @Test public void testByteArrayMessage() throws Exception { byte[] payload = {1, 2, 3}; - mailTarget.send(new GenericMessage(payload)); + this.consumer.onMessage(new GenericMessage(payload)); assertEquals("no mime message should have been sent", - 1, mailSender.getSentMimeMessages().size()); + 1, this.mailSender.getSentMimeMessages().size()); assertEquals("only one simple message must be sent", - 0, mailSender.getSentSimpleMailMessages().size()); + 0, this.mailSender.getSentSimpleMailMessages().size()); byte[] buffer = new byte[1024]; - MimeMessage mimeMessage = mailSender.getSentMimeMessages().get(0); + MimeMessage mimeMessage = this.mailSender.getSentMimeMessages().get(0); assertTrue("message must be multipart", mimeMessage.getContent() instanceof Multipart); int size = new DataInputStream(((Multipart) mimeMessage.getContent()).getBodyPart(0).getInputStream()).read(buffer); assertEquals("buffer size does not match", payload.length, size); diff --git a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailTargetTests.java b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailSendingMessageConsumerTests.java similarity index 88% rename from org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailTargetTests.java rename to org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailSendingMessageConsumerTests.java index 2e1278cb46..36cb02c0fa 100644 --- a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailTargetTests.java +++ b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailSendingMessageConsumerTests.java @@ -32,7 +32,7 @@ import org.junit.Before; import org.junit.Test; import org.springframework.integration.mail.MailHeaders; -import org.springframework.integration.mail.MailTarget; +import org.springframework.integration.mail.MailSendingMessageConsumer; import org.springframework.integration.mail.StaticMailHeaderGenerator; import org.springframework.integration.message.GenericMessage; import org.springframework.integration.message.MessageBuilder; @@ -42,9 +42,9 @@ import org.springframework.mail.SimpleMailMessage; /** * @author Marius Bogoevici */ -public class MailTargetTests { +public class MailSendingMessageConsumerTests { - private MailTarget mailTarget; + private MailSendingMessageConsumer consumer; private StubJavaMailSender mailSender; @@ -61,14 +61,20 @@ public class MailTargetTests { this.staticMailHeaderGenerator.setReplyTo(MailTestsHelper.REPLY_TO); this.staticMailHeaderGenerator.setSubject(MailTestsHelper.SUBJECT); this.staticMailHeaderGenerator.setTo(MailTestsHelper.TO); - this.mailTarget = new MailTarget(this.mailSender); - this.mailTarget.afterPropertiesSet(); + this.consumer = new MailSendingMessageConsumer(this.mailSender); + this.consumer.afterPropertiesSet(); } + @After + public void reset() { + this.mailSender.reset(); + } + + @Test public void testTextMessage() { - this.mailTarget.setHeaderGenerator(this.staticMailHeaderGenerator); - this.mailTarget.send(new StringMessage(MailTestsHelper.MESSAGE_TEXT)); + this.consumer.setHeaderGenerator(this.staticMailHeaderGenerator); + this.consumer.onMessage(new StringMessage(MailTestsHelper.MESSAGE_TEXT)); SimpleMailMessage message = MailTestsHelper.createSimpleMailMessage(); assertEquals("no mime message should have been sent", 0, mailSender.getSentMimeMessages().size()); @@ -80,9 +86,9 @@ public class MailTargetTests { @Test public void testByteArrayMessage() throws Exception { - this.mailTarget.setHeaderGenerator(this.staticMailHeaderGenerator); + this.consumer.setHeaderGenerator(this.staticMailHeaderGenerator); byte[] payload = {1, 2, 3}; - this.mailTarget.send(new GenericMessage(payload)); + this.consumer.onMessage(new GenericMessage(payload)); byte[] buffer = new byte[1024]; MimeMessage mimeMessage = this.mailSender.getSentMimeMessages().get(0); assertTrue("message must be multipart", mimeMessage.getContent() instanceof Multipart); @@ -104,7 +110,7 @@ public class MailTargetTests { .setHeader(MailHeaders.BCC, MailTestsHelper.BCC) .setHeader(MailHeaders.FROM, MailTestsHelper.FROM) .setHeader(MailHeaders.REPLY_TO, MailTestsHelper.REPLY_TO).build(); - this.mailTarget.send(message); + this.consumer.onMessage(message); SimpleMailMessage mailMessage = MailTestsHelper.createSimpleMailMessage(); assertEquals("no mime message should have been sent", 0, mailSender.getSentMimeMessages().size()); @@ -114,9 +120,4 @@ public class MailTargetTests { mailMessage, mailSender.getSentSimpleMailMessages().get(0)); } - @After - public void reset() { - this.mailSender.reset(); - } - } diff --git a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/MailTargetParserTests.java b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/MailOutboundChannelAdapterParserTests.java similarity index 57% rename from org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/MailTargetParserTests.java rename to org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/MailOutboundChannelAdapterParserTests.java index 8a10ec49b2..62e8bbf959 100644 --- a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/MailTargetParserTests.java +++ b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/MailOutboundChannelAdapterParserTests.java @@ -25,7 +25,7 @@ import org.springframework.beans.DirectFieldAccessor; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.mail.MailHeaderGenerator; -import org.springframework.integration.mail.MailTarget; +import org.springframework.integration.mail.MailSendingMessageConsumer; import org.springframework.integration.message.Message; import org.springframework.mail.MailMessage; import org.springframework.mail.MailSender; @@ -33,36 +33,42 @@ import org.springframework.mail.MailSender; /** * @author Mark Fisher */ -public class MailTargetParserTests { +public class MailOutboundChannelAdapterParserTests { @Test - public void testTargetWithMailSenderReference() { + public void adapterWithMailSenderReference() { ApplicationContext context = new ClassPathXmlApplicationContext( - "mailTargetParserTests.xml", this.getClass()); - MailTarget target = (MailTarget) context.getBean("targetWithMailSenderReference"); - DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(target); + "mailOutboundChannelAdapterParserTests.xml", this.getClass()); + Object adapter = context.getBean("adapterWithMailSenderReference.adapter"); + MailSendingMessageConsumer consumer = (MailSendingMessageConsumer) + new DirectFieldAccessor(adapter).getPropertyValue("consumer"); + DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(consumer); MailSender mailSender = (MailSender) fieldAccessor.getPropertyValue("mailSender"); assertNotNull(mailSender); } @Test - public void testTargetWithHostProperty() { + public void adapterWithHostProperty() { ApplicationContext context = new ClassPathXmlApplicationContext( - "mailTargetParserTests.xml", this.getClass()); - MailTarget target = (MailTarget) context.getBean("targetWithHostProperty"); - DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(target); + "mailOutboundChannelAdapterParserTests.xml", this.getClass()); + Object adapter = context.getBean("adapterWithHostProperty.adapter"); + MailSendingMessageConsumer consumer = (MailSendingMessageConsumer) + new DirectFieldAccessor(adapter).getPropertyValue("consumer"); + DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(consumer); MailSender mailSender = (MailSender) fieldAccessor.getPropertyValue("mailSender"); assertNotNull(mailSender); } @Test - public void testTargetWithHeaderGeneratorReference() { + public void adapterWithHeaderGeneratorReference() { ApplicationContext context = new ClassPathXmlApplicationContext( - "mailTargetParserTests.xml", this.getClass()); - MailTarget target = (MailTarget) context.getBean("targetWithHeaderGeneratorReference"); - DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(target); - MailHeaderGenerator headerGenerator = - (MailHeaderGenerator) fieldAccessor.getPropertyValue("mailHeaderGenerator"); + "mailOutboundChannelAdapterParserTests.xml", this.getClass()); + Object adapter = context.getBean("adapterWithHeaderGeneratorReference.adapter"); + MailSendingMessageConsumer consumer = (MailSendingMessageConsumer) + new DirectFieldAccessor(adapter).getPropertyValue("consumer"); + DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(consumer); + MailHeaderGenerator headerGenerator = (MailHeaderGenerator) + fieldAccessor.getPropertyValue("mailHeaderGenerator"); assertEquals(TestHeaderGenerator.class, headerGenerator.getClass()); } diff --git a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/mailTargetParserTests.xml b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/mailOutboundChannelAdapterParserTests.xml similarity index 71% rename from org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/mailTargetParserTests.xml rename to org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/mailOutboundChannelAdapterParserTests.xml index 36bf4e8ce6..e19ee8afa8 100644 --- a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/mailTargetParserTests.xml +++ b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/config/mailOutboundChannelAdapterParserTests.xml @@ -7,11 +7,15 @@ http://www.springframework.org/schema/integration/mail http://www.springframework.org/schema/integration/mail/spring-integration-mail-1.0.xsd"> - + - + + @@ -20,11 +24,6 @@ - - - + \ No newline at end of file diff --git a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/mailTarget.xml b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/mailSendingMessageConsumerContextTests.xml similarity index 94% rename from org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/mailTarget.xml rename to org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/mailSendingMessageConsumerContextTests.xml index bfca978a37..5cf0c3aa71 100644 --- a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/mailTarget.xml +++ b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/mailSendingMessageConsumerContextTests.xml @@ -15,7 +15,7 @@ - +