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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
}
|
||||
|
||||
@@ -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" }));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user