INT-1123, INT-1125

This commit is contained in:
Mark Fisher
2010-05-07 04:10:57 +00:00
parent 752fd5df0f
commit 3a9e6f3bca
2 changed files with 27 additions and 9 deletions

View File

@@ -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<String> 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);
}

View File

@@ -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<String> 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<String> 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());
}