Added the (optional) 'header-generator' attribute for the <mail-target/> element (INT-145).

This commit is contained in:
Mark Fisher
2008-03-07 13:34:27 +00:00
parent b757718836
commit 4251295a83
4 changed files with 38 additions and 0 deletions

View File

@@ -102,6 +102,7 @@
</xsd:annotation>
<xsd:attribute name="id" type="xsd:string"/>
<xsd:attribute name="mail-sender" type="xsd:string"/>
<xsd:attribute name="header-generator" type="xsd:string"/>
<xsd:attribute name="host" type="xsd:string"/>
<xsd:attribute name="username" type="xsd:string"/>
<xsd:attribute name="password" type="xsd:string"/>

View File

@@ -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);

View File

@@ -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) {
}
}
}

View File

@@ -24,4 +24,10 @@
</constructor-arg>
</bean>
<si:mail-target id="adapterWithHeaderGeneratorReference" mail-sender="mailSender" channel="testChannel"
header-generator="testHeaderGenerator"/>
<bean id="testHeaderGenerator"
class="org.springframework.integration.adapter.mail.config.MailTargetAdapterParserTests$TestHeaderGenerator"/>
</beans>