From a71127fb4dc00b5da2ec6567ac68ce547a29c2f5 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Sat, 22 Nov 2008 17:09:14 +0000 Subject: [PATCH] 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). --- .../jms/DefaultJmsHeaderMapper.java | 34 +++++++++++-------- .../integration/jms/JmsHeaders.java | 20 ++++------- .../jms/config/JmsNamespaceHandler.java | 4 +-- .../jms/DefaultJmsHeaderMapperTests.java | 22 ++++++------ 4 files changed, 40 insertions(+), 40 deletions(-) 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 a76070cd84..b53ec1b3c3 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 @@ -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 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; } diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsHeaders.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsHeaders.java index 87287cd7d5..722dd19d07 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsHeaders.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsHeaders.java @@ -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"; } diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java index 50bd601d12..0494ed230c 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java @@ -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" })); } } 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 ec906fd16c..b7e4507e93 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 @@ -107,7 +107,7 @@ public class DefaultJmsHeaderMapperTests { @Test public void testUserDefinedPropertyMappedFromHeader() throws JMSException { Message 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 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 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 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 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() {