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 5d8aad6ac0..8bcf0d1d09 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -63,15 +63,18 @@ public class DefaultJmsHeaderMapper implements JmsHeaderMapper { public void fromHeaders(MessageHeaders headers, javax.jms.Message jmsMessage) { try { Object jmsCorrelationId = headers.get(JmsHeaders.CORRELATION_ID); - if (jmsCorrelationId != null && (jmsCorrelationId instanceof String)) { + if (jmsCorrelationId instanceof Number) { + jmsCorrelationId = ((Number) jmsCorrelationId).toString(); + } + if (jmsCorrelationId instanceof String) { jmsMessage.setJMSCorrelationID((String) jmsCorrelationId); } Object jmsReplyTo = headers.get(JmsHeaders.REPLY_TO); - if (jmsReplyTo != null && (jmsReplyTo instanceof Destination)) { + if (jmsReplyTo instanceof Destination) { jmsMessage.setJMSReplyTo((Destination) jmsReplyTo); } Object jmsType = headers.get(JmsHeaders.TYPE); - if (jmsType != null && (jmsType instanceof String)) { + if (jmsType instanceof String) { jmsMessage.setJMSType((String) jmsType); } Set attributeNames = headers.keySet(); @@ -84,7 +87,13 @@ public class DefaultJmsHeaderMapper implements JmsHeaderMapper { jmsMessage.setObjectProperty(attributeName, value); } catch (Exception e) { - if (logger.isWarnEnabled()) { + if (attributeName.startsWith("JMSX")) { + if (logger.isTraceEnabled()) { + logger.trace("skipping reserved header, it cannot be set by client: " + + attributeName); + } + } + else if (logger.isWarnEnabled()) { logger.warn("failed to map Message header '" + attributeName + "' to JMS property", e); } 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 7edde82480..04cb59300d 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; +import java.util.Date; import java.util.Map; import javax.jms.Destination; @@ -29,8 +30,6 @@ import javax.jms.JMSException; import org.junit.Test; import org.springframework.integration.core.Message; -import org.springframework.integration.jms.DefaultJmsHeaderMapper; -import org.springframework.integration.jms.JmsHeaders; import org.springframework.integration.message.MessageBuilder; /** @@ -73,12 +72,22 @@ public class DefaultJmsHeaderMapperTests { } @Test - public void testJmsCorrelationIdIgnoredIfIncorrectType() throws JMSException { + public void testJmsCorrelationIdNumberConvertsToString() throws JMSException { Message message = MessageBuilder.withPayload("test") .setHeader(JmsHeaders.CORRELATION_ID, new Integer(123)).build(); DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); javax.jms.Message jmsMessage = new StubTextMessage(); mapper.fromHeaders(message.getHeaders(), jmsMessage); + assertEquals("123", jmsMessage.getJMSCorrelationID()); + } + + @Test + public void testJmsCorrelationIdIgnoredIfIncorrectType() throws JMSException { + Message message = MessageBuilder.withPayload("test") + .setHeader(JmsHeaders.CORRELATION_ID, new Date()).build(); + DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper(); + javax.jms.Message jmsMessage = new StubTextMessage(); + mapper.fromHeaders(message.getHeaders(), jmsMessage); assertNull(jmsMessage.getJMSCorrelationID()); }