From 4bb3779eca12455b744c8febc10458154172aa6c Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Tue, 30 Jun 2009 03:02:09 +0000 Subject: [PATCH] INT-643 --- .../ChannelPublishingJmsMessageListener.java | 4 +-- ...nnelPublishingJmsMessageListenerTests.java | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListener.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListener.java index 898ea71527..8478e09f0a 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListener.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListener.java @@ -187,8 +187,8 @@ public class ChannelPublishingJmsMessageListener implements SessionAwareMessageL } public final void afterPropertiesSet() { - if (this.messageConverter == null) { - HeaderMappingMessageConverter hmmc = new HeaderMappingMessageConverter(null, this.headerMapper); + if (!(this.messageConverter instanceof HeaderMappingMessageConverter)) { + HeaderMappingMessageConverter hmmc = new HeaderMappingMessageConverter(this.messageConverter, this.headerMapper); hmmc.setExtractJmsMessageBody(this.extractRequestPayload); hmmc.setExtractIntegrationMessagePayload(this.extractReplyPayload); this.messageConverter = hmmc; diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListenerTests.java b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListenerTests.java index 34514f3322..cb938ef4fa 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListenerTests.java +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListenerTests.java @@ -16,12 +16,15 @@ package org.springframework.integration.jms; +import static org.junit.Assert.assertEquals; + import javax.jms.InvalidDestinationException; import javax.jms.JMSException; import javax.jms.Session; import org.junit.Test; +import org.springframework.beans.DirectFieldAccessor; import org.springframework.core.task.SimpleAsyncTaskExecutor; import org.springframework.integration.channel.PollableChannel; import org.springframework.integration.channel.QueueChannel; @@ -30,6 +33,7 @@ import org.springframework.integration.core.MessageChannel; import org.springframework.integration.message.StringMessage; import org.springframework.jms.support.converter.MessageConversionException; import org.springframework.jms.support.converter.MessageConverter; +import org.springframework.jms.support.converter.SimpleMessageConverter; /** * @author Mark Fisher @@ -52,6 +56,27 @@ public class ChannelPublishingJmsMessageListenerTests { listener.onMessage(jmsMessage, session); } + @Test + public void defaultHeaderMappingMessageConverter() { + ChannelPublishingJmsMessageListener listener = new ChannelPublishingJmsMessageListener(); + listener.afterPropertiesSet(); + Object converter = new DirectFieldAccessor(listener).getPropertyValue("messageConverter"); + assertEquals(HeaderMappingMessageConverter.class, converter.getClass()); + Object wrappedConverter = new DirectFieldAccessor(converter).getPropertyValue("converter"); + assertEquals(SimpleMessageConverter.class, wrappedConverter.getClass()); + } + + @Test + public void customMessageConverterDecoratedForHeaderMapping() { + ChannelPublishingJmsMessageListener listener = new ChannelPublishingJmsMessageListener(); + MessageConverter originalConverter = new TestMessageConverter(); + listener.setMessageConverter(originalConverter); + listener.afterPropertiesSet(); + Object converter = new DirectFieldAccessor(listener).getPropertyValue("messageConverter"); + assertEquals(HeaderMappingMessageConverter.class, converter.getClass()); + Object wrappedConverter = new DirectFieldAccessor(converter).getPropertyValue("converter"); + assertEquals(originalConverter, wrappedConverter); + } private void startBackgroundReplier(final PollableChannel channel) { new SimpleAsyncTaskExecutor().execute(new Runnable() {