diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd index e61e00f5af..da8572d532 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd @@ -102,6 +102,7 @@ + diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParser.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParser.java index 1d743463e0..f0c337fe54 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParser.java +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParser.java @@ -56,6 +56,7 @@ public class MailTargetAdapterParser extends AbstractSingleBeanDefinitionParser String host = element.getAttribute("host"); String username = element.getAttribute("username"); String password = element.getAttribute("password"); + String headerGeneratorRef = element.getAttribute("header-generator"); if (StringUtils.hasText(mailSenderRef)) { if (StringUtils.hasText(host) || StringUtils.hasText(username) || StringUtils.hasText(password)) { throw new MessagingConfigurationException("The 'host', 'username', and 'password' properties " + @@ -77,6 +78,10 @@ public class MailTargetAdapterParser extends AbstractSingleBeanDefinitionParser else { throw new MessagingConfigurationException("Either a 'mail-sender' reference or 'host' property is required."); } + if (StringUtils.hasText(headerGeneratorRef)) { + adapterDef.getPropertyValues().addPropertyValue( + "headerGenerator", new RuntimeBeanReference(headerGeneratorRef)); + } String adapterBeanName = parserContext.getReaderContext().generateBeanName(adapterDef); parserContext.registerBeanComponent(new BeanComponentDefinition(adapterDef, adapterBeanName)); builder.addPropertyReference("handler", adapterBeanName); diff --git a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParserTests.java b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParserTests.java index dcb4367220..be36927d7b 100644 --- a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParserTests.java +++ b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/config/MailTargetAdapterParserTests.java @@ -16,16 +16,21 @@ package org.springframework.integration.adapter.mail.config; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import org.junit.Test; +import org.springframework.beans.DirectFieldAccessor; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.integration.adapter.mail.MailHeaderGenerator; import org.springframework.integration.adapter.mail.MailTargetAdapter; import org.springframework.integration.endpoint.DefaultMessageEndpoint; import org.springframework.integration.handler.MessageHandler; +import org.springframework.integration.message.Message; +import org.springframework.mail.MailMessage; /** * @author Mark Fisher @@ -52,4 +57,25 @@ public class MailTargetAdapterParserTests { assertTrue(handler instanceof MailTargetAdapter); } + @Test + public void testAdapterWithHeaderGeneratorReference() { + ApplicationContext context = new ClassPathXmlApplicationContext( + "mailTargetAdapterParserTests.xml", this.getClass()); + DefaultMessageEndpoint endpoint = (DefaultMessageEndpoint) context.getBean("adapterWithHeaderGeneratorReference"); + MessageHandler handler = endpoint.getHandler(); + assertNotNull(handler); + assertTrue(handler instanceof MailTargetAdapter); + DirectFieldAccessor fieldAccessor = new DirectFieldAccessor(handler); + MailHeaderGenerator headerGenerator = + (MailHeaderGenerator) fieldAccessor.getPropertyValue("mailHeaderGenerator"); + assertEquals(TestHeaderGenerator.class, headerGenerator.getClass()); + } + + + public static class TestHeaderGenerator implements MailHeaderGenerator { + + public void populateMailMessageHeader(MailMessage mailMessage, Message message) { + } + } + } diff --git a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/config/mailTargetAdapterParserTests.xml b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/config/mailTargetAdapterParserTests.xml index 0699350033..53d1bd0200 100644 --- a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/config/mailTargetAdapterParserTests.xml +++ b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/config/mailTargetAdapterParserTests.xml @@ -24,4 +24,10 @@ + + + + \ No newline at end of file