This commit is contained in:
Mark Fisher
2009-06-30 03:02:09 +00:00
parent b1e8c23d88
commit 4bb3779eca
2 changed files with 27 additions and 2 deletions

View File

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

View File

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