diff --git a/spring-integration-jms/src/main/java/org/springframework/integration/jms/DefaultJmsHeaderMapper.java b/spring-integration-jms/src/main/java/org/springframework/integration/jms/DefaultJmsHeaderMapper.java index 67bd781957..52df23c090 100644 --- a/spring-integration-jms/src/main/java/org/springframework/integration/jms/DefaultJmsHeaderMapper.java +++ b/spring-integration-jms/src/main/java/org/springframework/integration/jms/DefaultJmsHeaderMapper.java @@ -127,22 +127,47 @@ public class DefaultJmsHeaderMapper implements JmsHeaderMapper { public Map toHeaders(javax.jms.Message jmsMessage) { Map headers = new HashMap(); try { - String messageId = jmsMessage.getJMSMessageID(); - if (messageId != null) { - headers.put(JmsHeaders.MESSAGE_ID, messageId); + try { + String messageId = jmsMessage.getJMSMessageID(); + if (messageId != null) { + headers.put(JmsHeaders.MESSAGE_ID, messageId); + } } - String correlationId = jmsMessage.getJMSCorrelationID(); - if (correlationId != null) { - headers.put(JmsHeaders.CORRELATION_ID, correlationId); + catch (Exception e) { + logger.info("failed to read JMSMessageID property, skipping", e); } - Destination replyTo = jmsMessage.getJMSReplyTo(); - if (replyTo != null) { - headers.put(JmsHeaders.REPLY_TO, replyTo); + try { + String correlationId = jmsMessage.getJMSCorrelationID(); + if (correlationId != null) { + headers.put(JmsHeaders.CORRELATION_ID, correlationId); + } } - headers.put(JmsHeaders.REDELIVERED, jmsMessage.getJMSRedelivered()); - String type = jmsMessage.getJMSType(); - if (type != null) { - headers.put(JmsHeaders.TYPE, type); + catch (Exception e) { + logger.info("failed to read JMSCorrelationID property, skipping", e); + } + try { + Destination replyTo = jmsMessage.getJMSReplyTo(); + if (replyTo != null) { + headers.put(JmsHeaders.REPLY_TO, replyTo); + } + } + catch (Exception e) { + logger.info("failed to read JMSReplyTo property, skipping", e); + } + try { + headers.put(JmsHeaders.REDELIVERED, jmsMessage.getJMSRedelivered()); + } + catch (Exception e) { + logger.info("failed to read JMSRedelivered property, skipping", e); + } + try { + String type = jmsMessage.getJMSType(); + if (type != null) { + headers.put(JmsHeaders.TYPE, type); + } + } + catch (Exception e) { + logger.info("failed to read JMSType property, skipping", e); } Enumeration jmsPropertyNames = jmsMessage.getPropertyNames(); if (jmsPropertyNames != null) { diff --git a/spring-integration-jms/src/test/java/org/springframework/integration/jms/DefaultJmsHeaderMapperTests.java b/spring-integration-jms/src/test/java/org/springframework/integration/jms/DefaultJmsHeaderMapperTests.java index 40eb19a406..4be8d98c78 100644 --- a/spring-integration-jms/src/test/java/org/springframework/integration/jms/DefaultJmsHeaderMapperTests.java +++ b/spring-integration-jms/src/test/java/org/springframework/integration/jms/DefaultJmsHeaderMapperTests.java @@ -264,7 +264,7 @@ public class DefaultJmsHeaderMapperTests { javax.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSReplyTo(Destination replyTo) throws JMSException { - throw new IllegalArgumentException("illegal property"); + throw new JMSException("illegal property"); } }; mapper.fromHeaders(message.getHeaders(), jmsMessage); @@ -283,7 +283,7 @@ public class DefaultJmsHeaderMapperTests { javax.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSType(String type) throws JMSException { - throw new IllegalArgumentException("illegal property"); + throw new JMSException("illegal property"); } }; mapper.fromHeaders(message.getHeaders(), jmsMessage); @@ -302,7 +302,7 @@ public class DefaultJmsHeaderMapperTests { javax.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSCorrelationID(String correlationId) throws JMSException { - throw new IllegalArgumentException("illegal property"); + throw new JMSException("illegal property"); } }; mapper.fromHeaders(message.getHeaders(), jmsMessage); @@ -321,7 +321,7 @@ public class DefaultJmsHeaderMapperTests { javax.jms.Message jmsMessage = new StubTextMessage() { @Override public void setJMSCorrelationID(String correlationId) throws JMSException { - throw new IllegalArgumentException("illegal property"); + throw new JMSException("illegal property"); } }; mapper.fromHeaders(message.getHeaders(), jmsMessage); @@ -330,4 +330,84 @@ public class DefaultJmsHeaderMapperTests { assertEquals("bar", jmsMessage.getStringProperty("foo")); } + @Test + public void attemptToReadDisallowedMessageIdPropertyIsNotFatal() throws JMSException { + DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); + javax.jms.Message jmsMessage = new StubTextMessage() { + @Override + public String getJMSMessageID() throws JMSException { + throw new JMSException("illegal property"); + } + }; + jmsMessage.setStringProperty("foo", "bar"); + Map headers = mapper.toHeaders(jmsMessage); + assertNull(headers.get(JmsHeaders.MESSAGE_ID)); + assertNotNull(headers.get("foo")); + assertEquals("bar", headers.get("foo")); + } + + @Test + public void attemptToReadDisallowedCorrelationIdPropertyIsNotFatal() throws JMSException { + DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); + javax.jms.Message jmsMessage = new StubTextMessage() { + @Override + public String getJMSCorrelationID() throws JMSException { + throw new JMSException("illegal property"); + } + }; + jmsMessage.setStringProperty("foo", "bar"); + Map headers = mapper.toHeaders(jmsMessage); + assertNull(headers.get(JmsHeaders.CORRELATION_ID)); + assertNotNull(headers.get("foo")); + assertEquals("bar", headers.get("foo")); + } + + @Test + public void attemptToReadDisallowedTypePropertyIsNotFatal() throws JMSException { + DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); + javax.jms.Message jmsMessage = new StubTextMessage() { + @Override + public String getJMSType() throws JMSException { + throw new JMSException("illegal property"); + } + }; + jmsMessage.setStringProperty("foo", "bar"); + Map headers = mapper.toHeaders(jmsMessage); + assertNull(headers.get(JmsHeaders.TYPE)); + assertNotNull(headers.get("foo")); + assertEquals("bar", headers.get("foo")); + } + + @Test + public void attemptToReadDisallowedReplyToPropertyIsNotFatal() throws JMSException { + DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); + javax.jms.Message jmsMessage = new StubTextMessage() { + @Override + public Destination getJMSReplyTo() throws JMSException { + throw new JMSException("illegal property"); + } + }; + jmsMessage.setStringProperty("foo", "bar"); + Map headers = mapper.toHeaders(jmsMessage); + assertNull(headers.get(JmsHeaders.REPLY_TO)); + assertNotNull(headers.get("foo")); + assertEquals("bar", headers.get("foo")); + } + + @Test + public void attemptToReadDisallowedRedeliveredPropertyIsNotFatal() throws JMSException { + DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); + javax.jms.Message jmsMessage = new StubTextMessage() { + @Override + public boolean getJMSRedelivered() throws JMSException { + throw new JMSException("illegal property"); + } + }; + jmsMessage.setStringProperty("foo", "bar"); + Map headers = mapper.toHeaders(jmsMessage); + assertNull(headers.get(JmsHeaders.REDELIVERED)); + assertNotNull(headers.get("foo")); + assertEquals("bar", headers.get("foo")); + } + }