INT-1229 JMSExceptions thrown when trying to read unsupported JMS properties no longer cause the rest of the properties (e.g. user-defined String, Long, Object, etc. properties) to be skipped when mapping to MessageHeaders.

This commit is contained in:
Mark Fisher
2010-07-19 17:55:51 +00:00
parent 8acb89cedd
commit 6efdf9e372
2 changed files with 122 additions and 17 deletions

View File

@@ -127,22 +127,47 @@ public class DefaultJmsHeaderMapper implements JmsHeaderMapper {
public Map<String, Object> toHeaders(javax.jms.Message jmsMessage) {
Map<String, Object> headers = new HashMap<String, Object>();
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) {

View File

@@ -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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> headers = mapper.toHeaders(jmsMessage);
assertNull(headers.get(JmsHeaders.REDELIVERED));
assertNotNull(headers.get("foo"));
assertEquals("bar", headers.get("foo"));
}
}