INT-1203 JMS outbound-channel-adapter now properly configures the "message-converter" reference
This commit is contained in:
@@ -22,6 +22,8 @@ import javax.jms.Destination;
|
||||
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.jms.core.JmsTemplate;
|
||||
import org.springframework.jms.support.converter.MessageConverter;
|
||||
import org.springframework.jms.support.converter.SimpleMessageConverter;
|
||||
import org.springframework.jms.support.destination.DestinationResolver;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
@@ -52,6 +54,8 @@ public abstract class AbstractJmsTemplateBasedAdapter implements InitializingBea
|
||||
|
||||
private volatile JmsTemplate jmsTemplate;
|
||||
|
||||
private volatile MessageConverter messageConverter;
|
||||
|
||||
private volatile JmsHeaderMapper headerMapper;
|
||||
|
||||
private volatile boolean initialized;
|
||||
@@ -97,12 +101,19 @@ public abstract class AbstractJmsTemplateBasedAdapter implements InitializingBea
|
||||
this.pubSubDomain = pubSubDomain;
|
||||
}
|
||||
|
||||
public void setDestinationResolver(DestinationResolver destinationResolver) {
|
||||
this.destinationResolver = destinationResolver;
|
||||
/**
|
||||
* Provide a {@link MessageConverter} strategy to use for converting
|
||||
* between Spring Integration Messages and JMS Messages.
|
||||
* <p>
|
||||
* The default is a {@link HeaderMappingMessageConverter} that delegates to
|
||||
* a {@link SimpleMessageConverter}.
|
||||
*/
|
||||
public void setMessageConverter(MessageConverter messageConverter) {
|
||||
this.messageConverter = messageConverter;
|
||||
}
|
||||
|
||||
public void setJmsTemplate(JmsTemplate jmsTemplate) {
|
||||
this.jmsTemplate = jmsTemplate;
|
||||
public void setDestinationResolver(DestinationResolver destinationResolver) {
|
||||
this.destinationResolver = destinationResolver;
|
||||
}
|
||||
|
||||
public void setHeaderMapper(JmsHeaderMapper headerMapper) {
|
||||
@@ -168,6 +179,9 @@ public abstract class AbstractJmsTemplateBasedAdapter implements InitializingBea
|
||||
this.jmsTemplate.setTimeToLive(this.timeToLive);
|
||||
this.jmsTemplate.setPriority(this.priority);
|
||||
this.jmsTemplate.setDeliveryMode(this.deliveryMode);
|
||||
if (this.messageConverter != null) {
|
||||
this.jmsTemplate.setMessageConverter(this.messageConverter);
|
||||
}
|
||||
this.configureMessageConverter(this.jmsTemplate, this.headerMapper);
|
||||
this.initialized = true;
|
||||
}
|
||||
|
||||
@@ -60,15 +60,6 @@ public class JmsDestinationPollingSource extends AbstractJmsTemplateBasedAdapter
|
||||
this.messageSelector = messageSelector;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify a MessageConverter to use when mapping from JMS Mesages to
|
||||
* Spring Integration Messages. If it is not itself an implementation
|
||||
* of {@link HeaderMappingMessageConverter}, it will be wrapped.
|
||||
*/
|
||||
public void setMessageConverter(MessageConverter messageConverter) {
|
||||
this.getJmsTemplate().setMessageConverter(messageConverter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify whether the payload should be extracted from each received JMS
|
||||
* Message to be used as the Spring Integration Message payload.
|
||||
|
||||
@@ -70,6 +70,7 @@ public class JmsOutboundChannelAdapterParser extends AbstractOutboundChannelAdap
|
||||
if (StringUtils.hasText(headerMapper)) {
|
||||
builder.addPropertyReference(JmsAdapterParserUtils.HEADER_MAPPER_PROPERTY, headerMapper);
|
||||
}
|
||||
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "message-converter");
|
||||
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "extract-payload");
|
||||
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "time-to-live");
|
||||
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "priority");
|
||||
|
||||
@@ -29,6 +29,7 @@ import org.springframework.beans.factory.BeanDefinitionStoreException;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.integration.endpoint.EventDrivenConsumer;
|
||||
import org.springframework.integration.jms.JmsHeaderMapper;
|
||||
import org.springframework.jms.support.converter.MessageConverter;
|
||||
|
||||
/**
|
||||
* @author Mark Fisher
|
||||
@@ -88,6 +89,17 @@ public class JmsOutboundChannelAdapterParserTests {
|
||||
assertEquals(TestJmsHeaderMapper.class, headerMapper.getClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void adapterWithMessageConverter() {
|
||||
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
"jmsOutboundWithMessageConverter.xml", this.getClass());
|
||||
EventDrivenConsumer endpoint = (EventDrivenConsumer) context.getBean("adapter");
|
||||
DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(new DirectFieldAccessor(endpoint).getPropertyValue("handler"));
|
||||
MessageConverter messageConverter = (MessageConverter) handlerAccessor.getPropertyValue("messageConverter");
|
||||
assertNotNull(messageConverter);
|
||||
assertEquals(TestMessageConverter.class, messageConverter.getClass());
|
||||
}
|
||||
|
||||
@Test(expected = BeanDefinitionStoreException.class)
|
||||
public void adapterWithEmptyConnectionFactory() {
|
||||
try {
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:integration="http://www.springframework.org/schema/integration"
|
||||
xmlns:jms="http://www.springframework.org/schema/integration/jms"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/integration
|
||||
http://www.springframework.org/schema/integration/spring-integration.xsd
|
||||
http://www.springframework.org/schema/integration/jms
|
||||
http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsd">
|
||||
|
||||
<integration:channel id="input"/>
|
||||
|
||||
<jms:outbound-channel-adapter id="adapter"
|
||||
channel="input"
|
||||
destination="testDestination"
|
||||
message-converter="converter"/>
|
||||
|
||||
<bean id="converter" class="org.springframework.integration.jms.config.TestMessageConverter"/>
|
||||
|
||||
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
|
||||
<constructor-arg>
|
||||
<bean class="org.springframework.integration.jms.StubConnection">
|
||||
<constructor-arg value="target-test"/>
|
||||
</bean>
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
|
||||
<bean id="testDestination" class="org.springframework.integration.jms.StubDestination"/>
|
||||
|
||||
</beans>
|
||||
Reference in New Issue
Block a user