Added support for 'header-enricher' in the 'jms' namespace. Enables adding the 'reply-to' and/or 'correlation-id' values (INT-414).

This commit is contained in:
Mark Fisher
2008-10-13 22:47:23 +00:00
parent 847a532257
commit 5e8a3562e1
4 changed files with 42 additions and 4 deletions

View File

@@ -21,6 +21,9 @@ import java.util.Map;
import javax.jms.JMSException;
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.message.Message;
import org.springframework.integration.message.MessageBuilder;
@@ -37,6 +40,8 @@ import org.springframework.jms.support.converter.SimpleMessageConverter;
*/
public class HeaderMappingMessageConverter implements MessageConverter {
private final Log logger = LogFactory.getLog(this.getClass());
private final MessageConverter converter;
private final MessageHeaderMapper<javax.jms.Message> headerMapper;
@@ -56,6 +61,9 @@ public class HeaderMappingMessageConverter implements MessageConverter {
Object payload = this.converter.fromMessage(jmsMessage);
Map<String, Object> headerMap = this.headerMapper.mapToMessageHeaders(jmsMessage);
Message<?> message = MessageBuilder.withPayload(payload).copyHeaders(headerMap).build();
if (logger.isDebugEnabled()) {
logger.debug("converted JMS Message [" + jmsMessage + "] to integration Message [" + message + "]");
}
return message;
}
@@ -67,6 +75,9 @@ public class HeaderMappingMessageConverter implements MessageConverter {
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 + "]");
}
return jmsMessage;
}

View File

@@ -35,12 +35,12 @@ public abstract class JmsHeaders {
public static final String USER_PREFIX = "spring.integration.user.jms.";
public static final String CORRELATION_ID = TRANSPORT_PREFIX + "JMSCorrelationID";
public static final String CORRELATION_ID = TRANSPORT_PREFIX + "correlation-id";
public static final String REPLY_TO = TRANSPORT_PREFIX + "JMSReplyTo";
public static final String REPLY_TO = TRANSPORT_PREFIX + "reply-to";
public static final String REDELIVERED = TRANSPORT_PREFIX + "JMSRedelivered";
public static final String REDELIVERED = TRANSPORT_PREFIX + "redelivered";
public static final String TYPE = TRANSPORT_PREFIX + "JMSType";
public static final String TYPE = TRANSPORT_PREFIX + "type";
}

View File

@@ -17,6 +17,8 @@
package org.springframework.integration.jms.config;
import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
import org.springframework.integration.config.xml.SimpleHeaderEnricherParser;
import org.springframework.integration.jms.JmsHeaders;
/**
* Namespace handler for Spring Integration's <em>jms</em> namespace.
@@ -29,6 +31,8 @@ public class JmsNamespaceHandler extends NamespaceHandlerSupport {
this.registerBeanDefinitionParser("jms-gateway", new JmsGatewayParser());
this.registerBeanDefinitionParser("inbound-channel-adapter", new JmsInboundChannelAdapterParser());
this.registerBeanDefinitionParser("outbound-channel-adapter", new JmsOutboundChannelAdapterParser());
this.registerBeanDefinitionParser("header-enricher", new SimpleHeaderEnricherParser(
JmsHeaders.TRANSPORT_PREFIX, new String[] { "reply-to" }));
}
}

View File

@@ -109,6 +109,23 @@
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="header-enricher">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
Defines a Transformer for adding statically configured JMS Headers.
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="transformerType">
<xsd:attribute name="correlation-id" type="xsd:string"/>
<xsd:attribute name="reply-to" type="xsd:string"/>
<xsd:attribute name="overwrite" type="xsd:boolean"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="jmsAdapterType">
<xsd:annotation>
<xsd:documentation>
@@ -122,4 +139,10 @@
<xsd:attribute name="destination-name" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="transformerType">
<xsd:attribute name="id" type="xsd:string"/>
<xsd:attribute name="input-channel" type="xsd:string" use="required"/>
<xsd:attribute name="output-channel" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:schema>