MailTarget is now MailSendingMessageConsumer, and the "integration/mail" namespace now defines an "outbound-channel-adapter" element.
This commit is contained in:
@@ -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")
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -16,11 +16,11 @@
|
||||
]]></xsd:documentation>
|
||||
</xsd:annotation>
|
||||
|
||||
<xsd:element name="mail-target">
|
||||
<xsd:element name="outbound-channel-adapter">
|
||||
<xsd:complexType>
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
Defines a mail-sending target.
|
||||
Defines an outbound mail-sending Channel Adapter.
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="id" type="xsd:string"/>
|
||||
@@ -31,7 +31,7 @@
|
||||
<xsd:attribute name="password" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
|
||||
<xsd:element name="polling-mail-source">
|
||||
<xsd:complexType>
|
||||
<xsd:annotation>
|
||||
@@ -44,12 +44,12 @@
|
||||
<xsd:attribute name="mail-convertor" type="xsd:string" use="optional"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
|
||||
<xsd:element name="imap-idle-mail-source">
|
||||
<xsd:complexType>
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
Defines a polling mail source.
|
||||
Defines an IMAP mail source.
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="id" type="xsd:string" use="required"/>
|
||||
|
||||
@@ -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<byte[]>(payload));
|
||||
this.consumer.onMessage(new GenericMessage<byte[]>(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);
|
||||
@@ -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<byte[]>(payload));
|
||||
this.consumer.onMessage(new GenericMessage<byte[]>(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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -7,11 +7,15 @@
|
||||
http://www.springframework.org/schema/integration/mail
|
||||
http://www.springframework.org/schema/integration/mail/spring-integration-mail-1.0.xsd">
|
||||
|
||||
<mail:mail-target id="targetWithMailSenderReference" mail-sender="mailSender"/>
|
||||
<mail:outbound-channel-adapter id="adapterWithMailSenderReference" mail-sender="mailSender"/>
|
||||
|
||||
<mail:mail-target id="targetWithHostProperty"
|
||||
<mail:outbound-channel-adapter id="adapterWithHostProperty"
|
||||
host="somehost" username="someuser" password="somepassword"/>
|
||||
|
||||
<mail:outbound-channel-adapter id="adapterWithHeaderGeneratorReference"
|
||||
mail-sender="mailSender"
|
||||
header-generator="testHeaderGenerator"/>
|
||||
|
||||
<bean id="mailSender" class="org.springframework.integration.mail.StubJavaMailSender">
|
||||
<constructor-arg>
|
||||
<bean class="javax.mail.internet.MimeMessage">
|
||||
@@ -20,11 +24,6 @@
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
|
||||
<mail:mail-target id="targetWithHeaderGeneratorReference"
|
||||
mail-sender="mailSender"
|
||||
header-generator="testHeaderGenerator"/>
|
||||
|
||||
<bean id="testHeaderGenerator"
|
||||
class="org.springframework.integration.mail.config.MailTargetParserTests$TestHeaderGenerator"/>
|
||||
<bean id="testHeaderGenerator" class="org.springframework.integration.mail.config.MailOutboundChannelAdapterParserTests$TestHeaderGenerator"/>
|
||||
|
||||
</beans>
|
||||
@@ -15,7 +15,7 @@
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
|
||||
<bean id="mailTarget" class="org.springframework.integration.mail.MailTarget">
|
||||
<bean id="mailSendingMessageConsumer" class="org.springframework.integration.mail.MailSendingMessageConsumer">
|
||||
<constructor-arg ref="javaMailSender"/>
|
||||
<property name="headerGenerator">
|
||||
<bean class="org.springframework.integration.mail.StaticMailHeaderGenerator">
|
||||
Reference in New Issue
Block a user