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 0e82d54c0b..1862245fcf 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 @@ -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(); diff --git a/org.springframework.integration.jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd b/org.springframework.integration.jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd index 0c1862b8c2..2095216a2d 100644 --- a/org.springframework.integration.jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd +++ b/org.springframework.integration.jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd @@ -808,9 +808,18 @@ - + + + + Specify the default boolean value for whether to overwrite existing header values. This will only take effect for + sub-elements that do not provide their own 'overwrite' attribute. If the 'default-overwrite' attribute is not + provided, then the specified header values will NOT overwrite any existing ones with the same header names. + + + + + + @@ -820,14 +829,23 @@ - + - + + + + Boolean value to indicate whether this header value should overwrite an existing header value for the same name. + + + + + + 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..0b82f60b06 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; @@ -73,12 +74,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()); } diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsHeaderEnricherTests-context.xml b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsHeaderEnricherTests-context.xml index 0f1f85a58a..67dfd00ce7 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsHeaderEnricherTests-context.xml +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsHeaderEnricherTests-context.xml @@ -10,11 +10,15 @@ http://www.springframework.org/schema/integration/jms http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsd"> - + + + + + diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsHeaderEnricherTests.java b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsHeaderEnricherTests.java index cd322e0f05..1acf05b55e 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsHeaderEnricherTests.java +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsHeaderEnricherTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -42,7 +42,10 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; public class JmsHeaderEnricherTests { @Autowired - private MessageChannel input; + private MessageChannel valueTestInput; + + @Autowired + private MessageChannel expressionTestInput; @Autowired private PollableChannel output; @@ -51,8 +54,8 @@ public class JmsHeaderEnricherTests { private Destination testDestination; @Test // INT-804 - public void verifyReplyTo() throws Exception { - input.send(new StringMessage("test")); + public void verifyReplyToValue() throws Exception { + valueTestInput.send(new StringMessage("test")); Message result = output.receive(0); assertEquals(testDestination, result.getHeaders().get(JmsHeaders.REPLY_TO)); HeaderMappingMessageConverter converter = new HeaderMappingMessageConverter(); @@ -61,8 +64,8 @@ public class JmsHeaderEnricherTests { } @Test - public void verifyCorrelationId() throws Exception { - input.send(new StringMessage("test")); + public void verifyCorrelationIdValue() throws Exception { + valueTestInput.send(new StringMessage("test")); Message result = output.receive(0); assertEquals("ABC", result.getHeaders().get(JmsHeaders.CORRELATION_ID)); HeaderMappingMessageConverter converter = new HeaderMappingMessageConverter(); @@ -70,4 +73,14 @@ public class JmsHeaderEnricherTests { assertEquals("ABC", jmsMessage.getJMSCorrelationID()); } + @Test // see INT-1122 and INT-1123 + public void verifyCorrelationIdExpression() throws Exception { + expressionTestInput.send(new StringMessage("test")); + Message result = output.receive(0); + assertEquals(123, result.getHeaders().get(JmsHeaders.CORRELATION_ID)); + HeaderMappingMessageConverter converter = new HeaderMappingMessageConverter(); + javax.jms.Message jmsMessage = converter.toMessage(result, new StubSession("foo")); + assertEquals("123", jmsMessage.getJMSCorrelationID()); + } + }