From e7a11400031cf1960b3aeca386f406d955938971 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Fri, 17 Oct 2008 17:43:59 +0000 Subject: [PATCH] Refactored JmsGateway and HeaderMappingMessageConverter (related to INT-240, INT-355, and INT-376). --- .../jms/AbstractJmsTemplateBasedAdapter.java | 5 +- .../jms/DefaultJmsHeaderMapper.java | 9 +- .../jms/HeaderMappingMessageConverter.java | 121 +++++++++++++++--- .../integration/jms/JmsGateway.java | 38 ++++-- .../integration/jms/JmsHeaderMapper.java | 13 +- .../jms/config/JmsGatewayParser.java | 31 ++--- .../jms/config/spring-integration-jms-1.0.xsd | 2 +- .../jms/DefaultJmsHeaderMapperTests.java | 28 ++-- .../jms/config/JmsGatewayParserTests.java | 18 +-- .../JmsOutboundChannelAdapterParserTests.java | 8 +- ...erMapper.java => TestJmsHeaderMapper.java} | 8 +- ...sGatewaysWithExtractPayloadAttributes.xml} | 4 +- .../jms/config/jmsInboundWithHeaderMapper.xml | 2 +- .../config/jmsOutboundWithHeaderMapper.xml | 2 +- 14 files changed, 188 insertions(+), 101 deletions(-) rename org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/MessageHeaderMapper.java => org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsHeaderMapper.java (64%) rename org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/{TestMessageHeaderMapper.java => TestJmsHeaderMapper.java} (78%) rename org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/{jmsGatewaysWithExpectReplyAttributes.xml => jmsGatewaysWithExtractPayloadAttributes.xml} (93%) diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/AbstractJmsTemplateBasedAdapter.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/AbstractJmsTemplateBasedAdapter.java index 49c4615a67..2f96256b31 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/AbstractJmsTemplateBasedAdapter.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/AbstractJmsTemplateBasedAdapter.java @@ -20,7 +20,6 @@ import javax.jms.ConnectionFactory; import javax.jms.Destination; import org.springframework.beans.factory.InitializingBean; -import org.springframework.integration.adapter.MessageHeaderMapper; import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.support.converter.MessageConverter; import org.springframework.util.Assert; @@ -40,7 +39,7 @@ public abstract class AbstractJmsTemplateBasedAdapter implements InitializingBea private volatile JmsTemplate jmsTemplate; - private volatile MessageHeaderMapper headerMapper; + private volatile JmsHeaderMapper headerMapper; private volatile boolean initialized; @@ -87,7 +86,7 @@ public abstract class AbstractJmsTemplateBasedAdapter implements InitializingBea this.jmsTemplate = jmsTemplate; } - public void setHeaderMapper(MessageHeaderMapper headerMapper) { + public void setHeaderMapper(JmsHeaderMapper headerMapper) { this.headerMapper = headerMapper; } diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/DefaultJmsHeaderMapper.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/DefaultJmsHeaderMapper.java index ff913b4b09..a76070cd84 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/DefaultJmsHeaderMapper.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/DefaultJmsHeaderMapper.java @@ -28,16 +28,15 @@ import javax.jms.Destination; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.integration.adapter.MessageHeaderMapper; import org.springframework.integration.core.MessageHeaders; import org.springframework.util.StringUtils; /** - * A {@link HeaderMapper} implementation for JMS {@link javax.jms.Message Messages}. + * Default implementation of {@link JmsHeaderMapper}. * * @author Mark Fisher */ -public class DefaultJmsHeaderMapper implements MessageHeaderMapper { +public class DefaultJmsHeaderMapper implements JmsHeaderMapper { private static List> SUPPORTED_PROPERTY_TYPES = Arrays.asList(new Class[] { Boolean.class, Byte.class, Double.class, Float.class, Integer.class, Long.class, Short.class, String.class }); @@ -46,7 +45,7 @@ public class DefaultJmsHeaderMapper implements MessageHeaderMapper mapToMessageHeaders(javax.jms.Message jmsMessage) { + public Map toHeaders(javax.jms.Message jmsMessage) { Map headers = new HashMap(); try { String correlationId = jmsMessage.getJMSCorrelationID(); diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/HeaderMappingMessageConverter.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/HeaderMappingMessageConverter.java index 9c497d90c0..d945b45733 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/HeaderMappingMessageConverter.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/HeaderMappingMessageConverter.java @@ -16,25 +16,36 @@ package org.springframework.integration.jms; +import java.io.Serializable; import java.util.Map; import javax.jms.JMSException; +import javax.jms.ObjectMessage; import javax.jms.Session; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.integration.adapter.MessageHeaderMapper; import org.springframework.integration.core.Message; -import org.springframework.integration.core.MessagingException; +import org.springframework.integration.core.MessageHeaders; import org.springframework.integration.message.MessageBuilder; import org.springframework.jms.support.converter.MessageConversionException; import org.springframework.jms.support.converter.MessageConverter; -import org.springframework.jms.support.converter.SimpleMessageConverter; +import org.springframework.util.Assert; /** - * A {@link MessageConverter} implementation that delegates to an existing - * converter as well as an implementation of {@link MessageHeaderMapper}. + * A {@link MessageConverter} implementation that is capable of delegating to + * an existing converter instance and an existing {@link JmsHeaderMapper}. The + * default header mapper implementation is {@link DefaultJmsHeaderMapper}. + * No MessageConverter will be created by default. Unless a converter is + * provided, each inbound JMS Message will become the payload of an integration + * Message, and each outbound integration Message will become the body of a JMS + * Message. + * + *

Even without specifying a converter, it is possible to have the + * integration Message payload Object passed instead. Simply set the + * {@link #setExtractPayload(boolean) extractPayload} property to + * true. * * @author Mark Fisher */ @@ -44,39 +55,113 @@ public class HeaderMappingMessageConverter implements MessageConverter { private final MessageConverter converter; - private final MessageHeaderMapper headerMapper; + private final JmsHeaderMapper headerMapper; + + private volatile boolean extractPayload; + /** + * Create a HeaderMappingMessageConverter instance that will not + * delegate to another {@link MessageConverter} and will use the default + * implementation of the {@link JmsHeaderMapper} strategy. + */ + public HeaderMappingMessageConverter() { + this(null, null); + } + + /** + * Create a HeaderMappingMessageConverter instance that will delegate to + * the provided {@link MessageConverter} instance and will use the default + * implementation of the {@link JmsHeaderMapper} strategy. + */ public HeaderMappingMessageConverter(MessageConverter converter) { this(converter, null); } - public HeaderMappingMessageConverter(MessageConverter converter, MessageHeaderMapper headerMapper) { - this.converter = (converter != null ? converter : new SimpleMessageConverter()); + /** + * Create a HeaderMappingMessageConverter instance that will delegate to + * the provided {@link MessageConverter} and {@link JmsHeaderMapper}. + */ + public HeaderMappingMessageConverter(MessageConverter converter, JmsHeaderMapper headerMapper) { + this.converter = converter; this.headerMapper = (headerMapper != null ? headerMapper : new DefaultJmsHeaderMapper()); } + /** + * Specify whether the integration Message's payload should be extracted + * prior to conversion. Otherwise, the integration Message itself will be + * passed to the converter. + * + *

If no {@link MessageConverter} is available (the default), the + * integration Message will be sent within a JMS {@link ObjectMessage}. + * + *

Typically, this setting should be determined by the expectations of + * the target system. If the target system is not capable of understanding + * a Spring Integration Message, then set this to true. + * On the other hand, if the system is not only capable of understanding a + * Spring Integration Message but actually expected to rely upon header + * values, then this must be set to false so that the actual + * Message along with its headers will be passed. + * + *

The default value is false. + */ + public void setExtractPayload(boolean extractPayload) { + this.extractPayload = extractPayload; + } + + /** + * Converts from a JMS {@link javax.jms.Message} to an integration Message. + */ public Object fromMessage(javax.jms.Message jmsMessage) throws JMSException, MessageConversionException { - Object payload = this.converter.fromMessage(jmsMessage); - Map headerMap = this.headerMapper.mapToMessageHeaders(jmsMessage); - Message message = MessageBuilder.withPayload(payload).copyHeaders(headerMap).build(); + MessageBuilder builder = null; + if (this.converter == null) { + builder = MessageBuilder.withPayload(jmsMessage); + } + else { + Object conversionResult = this.converter.fromMessage(jmsMessage); + if (conversionResult == null) { + return null; + } + if (conversionResult instanceof Message) { + builder = MessageBuilder.fromMessage((Message) conversionResult); + } + else { + builder = MessageBuilder.withPayload(conversionResult); + } + } + Map headers = this.headerMapper.toHeaders(jmsMessage); + Message message = builder.copyHeadersIfAbsent(headers).build(); if (logger.isDebugEnabled()) { logger.debug("converted JMS Message [" + jmsMessage + "] to integration Message [" + message + "]"); } return message; } + /** + * Converts from an integration Message to a JMS {@link javax.jms.Message}. + */ public javax.jms.Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { - if (!(object instanceof Message)) { - throw new MessagingException("expected a '" + Message.class.getName() + - "', but received '" + object.getClass() + "'"); + MessageHeaders headers = null; + javax.jms.Message jmsMessage = null; + if (object instanceof Message) { + headers = ((Message) object).getHeaders(); + if (this.extractPayload) { + object = ((Message) object).getPayload(); + } + } + if (this.converter == null) { + Assert.isInstanceOf(Serializable.class, object, "Object must implement Serializable"); + jmsMessage = session.createObjectMessage((Serializable) object); + } + else { + jmsMessage = this.converter.toMessage(object, session); + } + if (headers != null) { + this.headerMapper.fromHeaders(headers, jmsMessage); } - Message message = (Message) object; - javax.jms.Message jmsMessage = this.converter.toMessage(message.getPayload(), session); - this.headerMapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage); if (logger.isDebugEnabled()) { - logger.debug("converted integration Message [" + message + "] to JMS Message [" + jmsMessage + "]"); + logger.debug("converted [" + object + "] to JMS Message [" + jmsMessage + "]"); } return jmsMessage; } diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsGateway.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsGateway.java index 6483e9d80d..72a9559fe1 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsGateway.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsGateway.java @@ -18,14 +18,18 @@ package org.springframework.integration.jms; import javax.jms.ConnectionFactory; import javax.jms.Destination; +import javax.jms.JMSException; +import javax.jms.MessageProducer; import javax.jms.Session; import org.springframework.beans.factory.DisposableBean; import org.springframework.context.Lifecycle; import org.springframework.core.task.TaskExecutor; +import org.springframework.integration.core.Message; import org.springframework.integration.gateway.SimpleMessagingGateway; import org.springframework.jms.listener.AbstractMessageListenerContainer; import org.springframework.jms.listener.DefaultMessageListenerContainer; +import org.springframework.jms.listener.SessionAwareMessageListener; import org.springframework.jms.listener.adapter.MessageListenerAdapter; import org.springframework.jms.support.converter.MessageConverter; import org.springframework.jms.support.converter.SimpleMessageConverter; @@ -65,7 +69,7 @@ public class JmsGateway extends SimpleMessagingGateway implements Lifecycle, Dis private volatile int idleTaskExecutionLimit = 1; - private boolean expectReply = false; + private volatile boolean extractPayloadForReply = false; public void setContainer(AbstractMessageListenerContainer container) { @@ -105,10 +109,6 @@ public class JmsGateway extends SimpleMessagingGateway implements Lifecycle, Dis this.sessionAcknowledgeMode = sessionAcknowledgeMode; } - public void setExpectReply(boolean expectReply) { - this.expectReply = expectReply; - } - public void setConcurrentConsumers(int concurrentConsumers) { this.concurrentConsumers = concurrentConsumers; } @@ -125,19 +125,35 @@ public class JmsGateway extends SimpleMessagingGateway implements Lifecycle, Dis this.idleTaskExecutionLimit = idleTaskExecutionLimit; } + public void setExtractPayloadForReply(boolean extractPayloadForReply) { + this.extractPayloadForReply = extractPayloadForReply; + } + + private void initialize() { if (this.container == null) { this.container = createDefaultContainer(); } - MessageListenerAdapter listener = new MessageListenerAdapter(); - listener.setDelegate(this); - listener.setDefaultListenerMethod(this.expectReply ? "sendAndReceive" : "send"); if (this.messageConverter == null) { this.messageConverter = new SimpleMessageConverter(); } if (!(this.messageConverter instanceof HeaderMappingMessageConverter)) { - this.messageConverter = new HeaderMappingMessageConverter(this.messageConverter); + HeaderMappingMessageConverter hmmc = new HeaderMappingMessageConverter(this.messageConverter); + hmmc.setExtractPayload(this.extractPayloadForReply); + this.messageConverter = hmmc; } + MessageListenerAdapter listener = new MessageListenerAdapter(); + listener.setDelegate(new SessionAwareMessageListener() { + public void onMessage(javax.jms.Message jmsMessage, Session session) throws JMSException { + Object object = messageConverter.fromMessage(jmsMessage); + Message replyMessage = JmsGateway.this.sendAndReceiveMessage(object); + if (replyMessage != null) { + javax.jms.Message jmsReply = messageConverter.toMessage(replyMessage, session); + MessageProducer producer = session.createProducer(jmsMessage.getJMSReplyTo()); + producer.send(jmsMessage.getJMSReplyTo(), jmsReply); + } + } + }); listener.setMessageConverter(this.messageConverter); this.container.setMessageListener(listener); if (!this.container.isActive()) { @@ -172,6 +188,8 @@ public class JmsGateway extends SimpleMessagingGateway implements Lifecycle, Dis return dmlc; } + // Lifecycle implementation + public boolean isRunning() { return (this.container != null && this.container.isRunning()); } @@ -187,6 +205,8 @@ public class JmsGateway extends SimpleMessagingGateway implements Lifecycle, Dis } } + // DisposableBean implementation + public void destroy() { if (this.container != null) { this.container.destroy(); diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/MessageHeaderMapper.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsHeaderMapper.java similarity index 64% rename from org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/MessageHeaderMapper.java rename to org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsHeaderMapper.java index 0da496fda3..2e52f90439 100644 --- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/MessageHeaderMapper.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsHeaderMapper.java @@ -14,22 +14,23 @@ * limitations under the License. */ -package org.springframework.integration.adapter; +package org.springframework.integration.jms; import java.util.Map; import org.springframework.integration.core.MessageHeaders; /** - * Strategy interface for mapping between a source or target object and an - * integration {@link MessageHeader}. + * Strategy interface for mapping integration Message headers to an outbound + * JMS Message (e.g. to configure JMS properties) or extracting integration + * header values from an inbound JMS Message. * * @author Mark Fisher */ -public interface MessageHeaderMapper { +public interface JmsHeaderMapper { - void mapFromMessageHeaders(MessageHeaders headers, T target); + void fromHeaders(MessageHeaders headers, javax.jms.Message jmsMessage); - Map mapToMessageHeaders(T source); + Map toHeaders(javax.jms.Message jmsMessage); } diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsGatewayParser.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsGatewayParser.java index 9cdb72b3c3..c61131cfde 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsGatewayParser.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsGatewayParser.java @@ -29,7 +29,7 @@ import org.springframework.integration.jms.JmsGateway; import org.springframework.util.StringUtils; /** - * Parser for the <jms-gateway> element. + * Parser for the <inbound-gateway> element of the 'jms' integration namespace. * * @author Mark Fisher */ @@ -87,29 +87,14 @@ public class JmsGatewayParser extends AbstractSingleBeanDefinitionParser { builder.addPropertyValue("sessionAcknowledgeMode", acknowledgeMode); } } - String transactionManager = element.getAttribute("transaction-manager"); - if (StringUtils.hasText(transactionManager)) { - builder.addPropertyReference("transactionManager", transactionManager); - } - String requestChannel = element.getAttribute("request-channel"); - if (StringUtils.hasText(requestChannel)) { - builder.addPropertyReference("requestChannel", requestChannel); - } - String requestTimeout = element.getAttribute("request-timeout"); - if (StringUtils.hasText(requestTimeout)) { - builder.addPropertyValue("requestTimeout", Long.parseLong(requestTimeout)); - } - String replyChannel = element.getAttribute("reply-channel"); - if (StringUtils.hasText(replyChannel)) { - builder.addPropertyReference("replyChannel", replyChannel); - } - String replyTimeout = element.getAttribute("reply-timeout"); - if (StringUtils.hasText(replyTimeout)) { - builder.addPropertyValue("replyTimeout", Long.parseLong(replyTimeout)); - } - if ("true".equals(element.getAttribute("expect-reply"))) { - builder.addPropertyValue("expectReply", Boolean.TRUE); + if ("true".equals(element.getAttribute("extract-payload-for-reply"))) { + builder.addPropertyValue("extractPayloadForReply", Boolean.TRUE); } + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "transaction-manager"); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "request-channel"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "request-timeout"); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "reply-channel"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "reply-timeout"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "concurrent-consumers"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "max-concurrent-consumers"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "max-messages-per-task"); diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd index 897bc47769..346ecebdf4 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd @@ -47,11 +47,11 @@ - + diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/DefaultJmsHeaderMapperTests.java b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/DefaultJmsHeaderMapperTests.java index 9194836429..ec906fd16c 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/DefaultJmsHeaderMapperTests.java +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/DefaultJmsHeaderMapperTests.java @@ -45,7 +45,7 @@ public class DefaultJmsHeaderMapperTests { .setHeader(JmsHeaders.REPLY_TO, replyTo).build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); - mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage); + mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNotNull(jmsMessage.getJMSReplyTo()); assertSame(replyTo, jmsMessage.getJMSReplyTo()); } @@ -56,7 +56,7 @@ public class DefaultJmsHeaderMapperTests { .setHeader(JmsHeaders.REPLY_TO, "not-a-destination").build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); - mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage); + mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNull(jmsMessage.getJMSReplyTo()); } @@ -67,7 +67,7 @@ public class DefaultJmsHeaderMapperTests { .setHeader(JmsHeaders.CORRELATION_ID, jmsCorrelationId).build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); - mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage); + mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNotNull(jmsMessage.getJMSCorrelationID()); assertEquals(jmsCorrelationId, jmsMessage.getJMSCorrelationID()); } @@ -78,7 +78,7 @@ public class DefaultJmsHeaderMapperTests { .setHeader(JmsHeaders.CORRELATION_ID, new Integer(123)).build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); - mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage); + mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNull(jmsMessage.getJMSCorrelationID()); } @@ -89,7 +89,7 @@ public class DefaultJmsHeaderMapperTests { .setHeader(JmsHeaders.TYPE, jmsType).build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); - mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage); + mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNotNull(jmsMessage.getJMSType()); assertEquals(jmsType, jmsMessage.getJMSType()); } @@ -100,7 +100,7 @@ public class DefaultJmsHeaderMapperTests { .setHeader(JmsHeaders.TYPE, new Integer(123)).build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); - mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage); + mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNull(jmsMessage.getJMSType()); } @@ -111,7 +111,7 @@ public class DefaultJmsHeaderMapperTests { .build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); - mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage); + mapper.fromHeaders(message.getHeaders(), jmsMessage); Object value = jmsMessage.getObjectProperty("foo"); assertNotNull(value); assertEquals(Integer.class, value.getClass()); @@ -126,7 +126,7 @@ public class DefaultJmsHeaderMapperTests { .build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); - mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage); + mapper.fromHeaders(message.getHeaders(), jmsMessage); Object value = jmsMessage.getObjectProperty("foo"); assertNull(value); } @@ -137,7 +137,7 @@ public class DefaultJmsHeaderMapperTests { javax.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSReplyTo(replyTo); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); - Map headers = mapper.mapToMessageHeaders(jmsMessage); + Map headers = mapper.toHeaders(jmsMessage); Object attrib = headers.get(JmsHeaders.REPLY_TO); assertNotNull(attrib); assertSame(replyTo, attrib); @@ -149,7 +149,7 @@ public class DefaultJmsHeaderMapperTests { javax.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSCorrelationID(correlationId); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); - Map headers = mapper.mapToMessageHeaders(jmsMessage); + Map headers = mapper.toHeaders(jmsMessage); Object attrib = headers.get(JmsHeaders.CORRELATION_ID); assertNotNull(attrib); assertSame(correlationId, attrib); @@ -161,7 +161,7 @@ public class DefaultJmsHeaderMapperTests { javax.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setJMSType(type); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); - Map headers = mapper.mapToMessageHeaders(jmsMessage); + Map headers = mapper.toHeaders(jmsMessage); Object attrib = headers.get(JmsHeaders.TYPE); assertNotNull(attrib); assertSame(type, attrib); @@ -172,7 +172,7 @@ public class DefaultJmsHeaderMapperTests { javax.jms.Message jmsMessage = new StubTextMessage(); jmsMessage.setIntProperty("foo", 123); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); - Map headers = mapper.mapToMessageHeaders(jmsMessage); + Map headers = mapper.toHeaders(jmsMessage); Object attrib = headers.get(JmsHeaders.USER_PREFIX + "foo"); assertNotNull(attrib); assertEquals(Integer.class, attrib.getClass()); @@ -196,7 +196,7 @@ public class DefaultJmsHeaderMapperTests { super.setObjectProperty(name, value); } }; - mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage); + mapper.fromHeaders(message.getHeaders(), jmsMessage); Object foo = jmsMessage.getObjectProperty("foo"); assertNotNull(foo); Object bar = jmsMessage.getObjectProperty("bar"); @@ -222,7 +222,7 @@ public class DefaultJmsHeaderMapperTests { super.setObjectProperty(name, value); } }; - mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage); + mapper.fromHeaders(message.getHeaders(), jmsMessage); Object foo = jmsMessage.getObjectProperty("foo"); assertNotNull(foo); Object bar = jmsMessage.getObjectProperty("bar"); diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsGatewayParserTests.java b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsGatewayParserTests.java index b277237c5f..d65c95cd01 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsGatewayParserTests.java +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsGatewayParserTests.java @@ -80,30 +80,30 @@ public class JmsGatewayParserTests { } @Test - public void testGatewayWithDefaultExpectReply() { + public void testGatewayWithDefaultExtractPayload() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "jmsGatewaysWithExpectReplyAttributes.xml", this.getClass()); + "jmsGatewaysWithExtractPayloadAttributes.xml", this.getClass()); JmsGateway gateway = (JmsGateway) context.getBean("defaultGateway"); DirectFieldAccessor accessor = new DirectFieldAccessor(gateway); - assertEquals(Boolean.FALSE, accessor.getPropertyValue("expectReply")); + assertEquals(Boolean.FALSE, accessor.getPropertyValue("extractPayloadForReply")); } @Test - public void testGatewayExpectingReply() { + public void testGatewayWithExtractPayloadTrue() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "jmsGatewaysWithExpectReplyAttributes.xml", this.getClass()); + "jmsGatewaysWithExtractPayloadAttributes.xml", this.getClass()); JmsGateway gateway = (JmsGateway) context.getBean("gatewayExpectingReply"); DirectFieldAccessor accessor = new DirectFieldAccessor(gateway); - assertEquals(Boolean.TRUE, accessor.getPropertyValue("expectReply")); + assertEquals(Boolean.TRUE, accessor.getPropertyValue("extractPayloadForReply")); } @Test - public void testGatewayNotExpectingReply() { + public void testGatewayWithExtractPayloadFalse() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "jmsGatewaysWithExpectReplyAttributes.xml", this.getClass()); + "jmsGatewaysWithExtractPayloadAttributes.xml", this.getClass()); JmsGateway gateway = (JmsGateway) context.getBean("gatewayNotExpectingReply"); DirectFieldAccessor accessor = new DirectFieldAccessor(gateway); - assertEquals(Boolean.FALSE, accessor.getPropertyValue("expectReply")); + assertEquals(Boolean.FALSE, accessor.getPropertyValue("extractPayloadForReply")); } @Test(expected=BeanDefinitionStoreException.class) diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsOutboundChannelAdapterParserTests.java b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsOutboundChannelAdapterParserTests.java index a3c6a1ddc9..2330d3c367 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsOutboundChannelAdapterParserTests.java +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsOutboundChannelAdapterParserTests.java @@ -25,8 +25,8 @@ import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.BeanDefinitionStoreException; import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.adapter.MessageHeaderMapper; import org.springframework.integration.endpoint.SubscribingConsumerEndpoint; +import org.springframework.integration.jms.JmsHeaderMapper; /** * @author Mark Fisher @@ -64,17 +64,15 @@ public class JmsOutboundChannelAdapterParserTests { } @Test - @SuppressWarnings("unchecked") public void adapterWithHeaderMapper() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "jmsOutboundWithHeaderMapper.xml", this.getClass()); SubscribingConsumerEndpoint endpoint = (SubscribingConsumerEndpoint) context.getBean("adapter"); DirectFieldAccessor accessor = new DirectFieldAccessor( new DirectFieldAccessor(endpoint).getPropertyValue("consumer")); - MessageHeaderMapper headerMapper = (MessageHeaderMapper) - accessor.getPropertyValue("headerMapper"); + JmsHeaderMapper headerMapper = (JmsHeaderMapper) accessor.getPropertyValue("headerMapper"); assertNotNull(headerMapper); - assertEquals(TestMessageHeaderMapper.class, headerMapper.getClass()); + assertEquals(TestJmsHeaderMapper.class, headerMapper.getClass()); } @Test(expected = BeanDefinitionStoreException.class) diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/TestMessageHeaderMapper.java b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/TestJmsHeaderMapper.java similarity index 78% rename from org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/TestMessageHeaderMapper.java rename to org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/TestJmsHeaderMapper.java index ecec7269a4..c40ac07b5a 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/TestMessageHeaderMapper.java +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/TestJmsHeaderMapper.java @@ -21,18 +21,18 @@ import java.util.Map; import javax.jms.Message; -import org.springframework.integration.adapter.MessageHeaderMapper; import org.springframework.integration.core.MessageHeaders; +import org.springframework.integration.jms.JmsHeaderMapper; /** * @author Mark Fisher */ -public class TestMessageHeaderMapper implements MessageHeaderMapper { +public class TestJmsHeaderMapper implements JmsHeaderMapper { - public void mapFromMessageHeaders(MessageHeaders headers, Message target) { + public void fromHeaders(MessageHeaders headers, Message target) { } - public Map mapToMessageHeaders(Message source) { + public Map toHeaders(Message source) { Map headerMap = new HashMap(); headerMap.put("testProperty", "foo"); headerMap.put("testAttribute", new Integer(123)); diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsGatewaysWithExpectReplyAttributes.xml b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsGatewaysWithExtractPayloadAttributes.xml similarity index 93% rename from org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsGatewaysWithExpectReplyAttributes.xml rename to org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsGatewaysWithExtractPayloadAttributes.xml index 1c182049dd..34aec969a7 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsGatewaysWithExpectReplyAttributes.xml +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsGatewaysWithExtractPayloadAttributes.xml @@ -23,12 +23,12 @@ + extract-payload-for-reply="false"/> + extract-payload-for-reply="true"/> diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsInboundWithHeaderMapper.xml b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsInboundWithHeaderMapper.xml index 48d6b1f5cc..7c513305ca 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsInboundWithHeaderMapper.xml +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsInboundWithHeaderMapper.xml @@ -18,7 +18,7 @@ - + diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithHeaderMapper.xml b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithHeaderMapper.xml index 93f8df9931..ea99602ad0 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithHeaderMapper.xml +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithHeaderMapper.xml @@ -17,7 +17,7 @@ destination="testDestination" header-mapper="mapper"/> - +