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() {