Errors during MessageHeader mapping are no longer fatal. Logging at WARN level (INT-206).
This commit is contained in:
@@ -22,11 +22,12 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.jms.Destination;
|
||||
import javax.jms.JMSException;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.springframework.integration.adapter.MessageHeaderMapper;
|
||||
import org.springframework.integration.message.MessageHeader;
|
||||
import org.springframework.integration.message.MessagingException;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
@@ -40,6 +41,9 @@ public class DefaultJmsHeaderMapper implements MessageHeaderMapper<javax.jms.Mes
|
||||
Boolean.class, Byte.class, Double.class, Float.class, Integer.class, Long.class, Short.class, String.class });
|
||||
|
||||
|
||||
private final Log logger = LogFactory.getLog(this.getClass());
|
||||
|
||||
|
||||
public void mapFromMessageHeader(MessageHeader header, javax.jms.Message jmsMessage) {
|
||||
try {
|
||||
Object jmsCorrelationId = header.getAttribute(JmsAttributeKeys.CORRELATION_ID);
|
||||
@@ -62,14 +66,23 @@ public class DefaultJmsHeaderMapper implements MessageHeaderMapper<javax.jms.Mes
|
||||
if (StringUtils.hasText(attributeName)) {
|
||||
Object value = header.getAttribute(attributeName);
|
||||
if (value != null && SUPPORTED_PROPERTY_TYPES.contains(value.getClass())) {
|
||||
jmsMessage.setObjectProperty(jmsAttributeName, value);
|
||||
try {
|
||||
jmsMessage.setObjectProperty(jmsAttributeName, value);
|
||||
}
|
||||
catch (Throwable t) {
|
||||
if (logger.isWarnEnabled()) {
|
||||
logger.warn("failed to map property '" + jmsAttributeName + "' from MessageHeader", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (JMSException e) {
|
||||
throw new MessagingException("failed to map from MessageHeader", e);
|
||||
catch (Throwable t) {
|
||||
if (logger.isWarnEnabled()) {
|
||||
logger.warn("error occurred while mapping properties from MessageHeader", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,8 +110,10 @@ public class DefaultJmsHeaderMapper implements MessageHeaderMapper<javax.jms.Mes
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (JMSException e) {
|
||||
throw new MessagingException("failed to map to MessageHeader", e);
|
||||
catch (Throwable t) {
|
||||
if (logger.isWarnEnabled()) {
|
||||
logger.warn("error occurred while mapping properties to MessageHeader", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -176,4 +176,54 @@ public class DefaultJmsHeaderMapperTests {
|
||||
assertEquals(123, ((Integer) attrib).intValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJMSExceptionIsNotFatal() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "foo", new Integer(123));
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "bad", new Integer(456));
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "bar", new Integer(789));
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage() {
|
||||
@Override
|
||||
public void setObjectProperty(String name, Object value) throws JMSException {
|
||||
if (name.equals("bad")) {
|
||||
throw new JMSException("illegal property");
|
||||
}
|
||||
super.setObjectProperty(name, value);
|
||||
}
|
||||
};
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
Object foo = jmsMessage.getObjectProperty("foo");
|
||||
assertNotNull(foo);
|
||||
Object bar = jmsMessage.getObjectProperty("bar");
|
||||
assertNotNull(bar);
|
||||
Object bad = jmsMessage.getObjectProperty("bad");
|
||||
assertNull(bad);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIllegalArgumentExceptionIsNotFatal() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "foo", new Integer(123));
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "bad", new Integer(456));
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "bar", new Integer(789));
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage() {
|
||||
@Override
|
||||
public void setObjectProperty(String name, Object value) throws JMSException {
|
||||
if (name.equals("bad")) {
|
||||
throw new IllegalArgumentException("illegal property");
|
||||
}
|
||||
super.setObjectProperty(name, value);
|
||||
}
|
||||
};
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
Object foo = jmsMessage.getObjectProperty("foo");
|
||||
assertNotNull(foo);
|
||||
Object bar = jmsMessage.getObjectProperty("bar");
|
||||
assertNotNull(bar);
|
||||
Object bad = jmsMessage.getObjectProperty("bad");
|
||||
assertNull(bad);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user