Removed the USER_PREFIX that was considered when mapping between MessageHeaders and JMS properties. Now, the DefaultJmsHeaderMapper will attempt to map all MessageHeaders and those with the JmsHeaders.PREFIX are the only ones treated differently (e.g. for mapping to the JMSCorrelationId).

This commit is contained in:
Mark Fisher
2008-11-22 17:09:14 +00:00
parent 2129047231
commit a71127fb4d
4 changed files with 40 additions and 40 deletions

View File

@@ -24,10 +24,12 @@ import java.util.Map;
import java.util.Set;
import javax.jms.Destination;
import javax.jms.JMSException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.integration.adapter.MessageMappingException;
import org.springframework.integration.core.MessageHeaders;
import org.springframework.util.StringUtils;
@@ -59,20 +61,19 @@ public class DefaultJmsHeaderMapper implements JmsHeaderMapper {
if (jmsType != null && (jmsType instanceof String)) {
jmsMessage.setJMSType((String) jmsType);
}
String prefix = JmsHeaders.USER_PREFIX;
Set<String> attributeNames = headers.keySet();
for (String attributeName : attributeNames) {
if (attributeName.startsWith(prefix)) {
String jmsAttributeName = attributeName.substring(prefix.length());
if (!attributeName.startsWith(JmsHeaders.PREFIX)) {
if (StringUtils.hasText(attributeName)) {
Object value = headers.get(attributeName);
if (value != null && SUPPORTED_PROPERTY_TYPES.contains(value.getClass())) {
try {
jmsMessage.setObjectProperty(jmsAttributeName, value);
jmsMessage.setObjectProperty(attributeName, value);
}
catch (Throwable t) {
catch (Exception e) {
if (logger.isWarnEnabled()) {
logger.warn("failed to map property '" + jmsAttributeName + "' from MessageHeader", t);
logger.warn("failed to map Message header '"
+ attributeName + "' to JMS property", e);
}
}
}
@@ -80,9 +81,9 @@ public class DefaultJmsHeaderMapper implements JmsHeaderMapper {
}
}
}
catch (Throwable t) {
catch (Exception e) {
if (logger.isWarnEnabled()) {
logger.warn("error occurred while mapping properties from MessageHeader", t);
logger.warn("error occurred while mapping properties from MessageHeaders", e);
}
}
}
@@ -107,15 +108,20 @@ public class DefaultJmsHeaderMapper implements JmsHeaderMapper {
if (jmsPropertyNames != null) {
while (jmsPropertyNames.hasMoreElements()) {
String propertyName = jmsPropertyNames.nextElement().toString();
headers.put(JmsHeaders.USER_PREFIX + propertyName,
jmsMessage.getObjectProperty(propertyName));
try {
headers.put(propertyName, jmsMessage.getObjectProperty(propertyName));
}
catch (Exception e) {
if (logger.isWarnEnabled()) {
logger.warn("error occurred while mapping JMS property '"
+ propertyName + "' to Message header", e);
}
}
}
}
}
catch (Throwable t) {
if (logger.isWarnEnabled()) {
logger.warn("error occurred while mapping properties to MessageHeader", t);
}
catch (JMSException e) {
throw new MessageMappingException("failure occurred while mapping JMS properties to MessageHeaders", e);
}
return headers;
}

View File

@@ -17,8 +17,8 @@
package org.springframework.integration.jms;
/**
* Pre-defined names and prefixes to be used for setting and/or retrieving JMS attributes
* from/to integration Message Headers.
* Pre-defined names and prefixes to be used for setting and/or retrieving JMS
* attributes from/to integration Message Headers.
*
* @author Mark Fisher
*/
@@ -27,20 +27,14 @@ public abstract class JmsHeaders {
/**
* Prefix for any message header that should be passed for usage by the JMS transport.
*/
public static final String TRANSPORT_PREFIX = "spring.integration.transport.jms.";
public static final String PREFIX = "spring.integration.jms.";
/**
* Prefix for any user-defined message header that should be passed within JMS properties.
*/
public static final String USER_PREFIX = "spring.integration.user.jms.";
public static final String CORRELATION_ID = PREFIX + "correlation-id";
public static final String REPLY_TO = PREFIX + "reply-to";
public static final String CORRELATION_ID = TRANSPORT_PREFIX + "correlation-id";
public static final String REDELIVERED = PREFIX + "redelivered";
public static final String REPLY_TO = TRANSPORT_PREFIX + "reply-to";
public static final String REDELIVERED = TRANSPORT_PREFIX + "redelivered";
public static final String TYPE = TRANSPORT_PREFIX + "type";
public static final String TYPE = PREFIX + "type";
}

View File

@@ -33,8 +33,8 @@ public class JmsNamespaceHandler extends NamespaceHandlerSupport {
this.registerBeanDefinitionParser("inbound-channel-adapter", new JmsInboundChannelAdapterParser());
this.registerBeanDefinitionParser("outbound-gateway", new JmsOutboundGatewayParser());
this.registerBeanDefinitionParser("outbound-channel-adapter", new JmsOutboundChannelAdapterParser());
this.registerBeanDefinitionParser("header-enricher", new SimpleHeaderEnricherParser(
JmsHeaders.TRANSPORT_PREFIX, new String[] { "reply-to" }));
this.registerBeanDefinitionParser("header-enricher",
new SimpleHeaderEnricherParser(JmsHeaders.PREFIX, new String[] { "reply-to" }));
}
}

View File

@@ -107,7 +107,7 @@ public class DefaultJmsHeaderMapperTests {
@Test
public void testUserDefinedPropertyMappedFromHeader() throws JMSException {
Message<String> message = MessageBuilder.withPayload("test")
.setHeader(JmsHeaders.USER_PREFIX + "foo", new Integer(123))
.setHeader("foo", new Integer(123))
.build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
javax.jms.Message jmsMessage = new StubTextMessage();
@@ -122,12 +122,12 @@ public class DefaultJmsHeaderMapperTests {
public void testUserDefinedPropertyWithUnsupportedType() throws JMSException {
Destination destination = new Destination() {};
Message<String> message = MessageBuilder.withPayload("test")
.setHeader(JmsHeaders.USER_PREFIX + "destination", destination)
.setHeader("destination", destination)
.build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
javax.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
Object value = jmsMessage.getObjectProperty("foo");
Object value = jmsMessage.getObjectProperty("destination");
assertNull(value);
}
@@ -173,18 +173,18 @@ public class DefaultJmsHeaderMapperTests {
jmsMessage.setIntProperty("foo", 123);
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
Map<String, Object> headers = mapper.toHeaders(jmsMessage);
Object attrib = headers.get(JmsHeaders.USER_PREFIX + "foo");
Object attrib = headers.get("foo");
assertNotNull(attrib);
assertEquals(Integer.class, attrib.getClass());
assertEquals(123, ((Integer) attrib).intValue());
}
@Test
public void testJMSExceptionIsNotFatal() throws JMSException {
public void testPropertyMappingExceptionIsNotFatal() throws JMSException {
Message<String> message = MessageBuilder.withPayload("test")
.setHeader(JmsHeaders.USER_PREFIX + "foo", new Integer(123))
.setHeader(JmsHeaders.USER_PREFIX + "bad", new Integer(456))
.setHeader(JmsHeaders.USER_PREFIX + "bar", new Integer(789))
.setHeader("foo", new Integer(123))
.setHeader("bad", new Integer(456))
.setHeader("bar", new Integer(789))
.build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
javax.jms.Message jmsMessage = new StubTextMessage() {
@@ -208,9 +208,9 @@ public class DefaultJmsHeaderMapperTests {
@Test
public void testIllegalArgumentExceptionIsNotFatal() throws JMSException {
Message<String> message = MessageBuilder.withPayload("test")
.setHeader(JmsHeaders.USER_PREFIX + "foo", new Integer(123))
.setHeader(JmsHeaders.USER_PREFIX + "bad", new Integer(456))
.setHeader(JmsHeaders.USER_PREFIX + "bar", new Integer(789))
.setHeader("foo", new Integer(123))
.setHeader("bad", new Integer(456))
.setHeader("bar", new Integer(789))
.build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
javax.jms.Message jmsMessage = new StubTextMessage() {