Errors during MessageHeader mapping are no longer fatal. Logging at WARN level (INT-206).

This commit is contained in:
Mark Fisher
2008-04-22 22:56:54 +00:00
parent bf0f8b16ec
commit 94fa8675ca
2 changed files with 72 additions and 7 deletions

View File

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

View File

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