INT-1569 added inboundPrefix and outboundPrefix to DefaultJmsHeaderMapper. For now, the defaults are blank.
This commit is contained in:
@@ -58,6 +58,36 @@ public class DefaultJmsHeaderMapper implements JmsHeaderMapper {
|
||||
|
||||
private final Log logger = LogFactory.getLog(this.getClass());
|
||||
|
||||
private volatile String inboundPrefix = "";
|
||||
|
||||
private volatile String outboundPrefix = "";
|
||||
|
||||
|
||||
/**
|
||||
* Specify a prefix to be appended to the integration message header name
|
||||
* for any JMS property that is being mapped into the MessageHeaders.
|
||||
* The Default is an empty string (no prefix).
|
||||
* <p/>
|
||||
* This does not affect the JMS properties covered by the specification/API,
|
||||
* such as JMSCorrelationID, etc. The header names used for mapping such
|
||||
* properties are all defined in our {@link JmsHeaders}.
|
||||
*/
|
||||
public void setInboundPrefix(String inboundPrefix) {
|
||||
this.inboundPrefix = (inboundPrefix != null) ? inboundPrefix : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify a prefix to be appended to the JMS property name for any
|
||||
* integration message header that is being mapped into the JMS Message.
|
||||
* The Default is an empty string (no prefix).
|
||||
* <p/>
|
||||
* This does not affect the JMS properties covered by the specification/API,
|
||||
* such as JMSCorrelationID, etc. The header names used for mapping such
|
||||
* properties are all defined in our {@link JmsHeaders}.
|
||||
*/
|
||||
public void setOutboundPrefix(String outboundPrefix) {
|
||||
this.outboundPrefix = (outboundPrefix != null) ? outboundPrefix : "";
|
||||
}
|
||||
|
||||
public void fromHeaders(MessageHeaders headers, javax.jms.Message jmsMessage) {
|
||||
try {
|
||||
@@ -91,26 +121,23 @@ public class DefaultJmsHeaderMapper implements JmsHeaderMapper {
|
||||
logger.info("failed to set JMSType, skipping", e);
|
||||
}
|
||||
}
|
||||
Set<String> attributeNames = headers.keySet();
|
||||
for (String attributeName : attributeNames) {
|
||||
if (!attributeName.startsWith(JmsHeaders.PREFIX)) {
|
||||
if (StringUtils.hasText(attributeName)) {
|
||||
Object value = headers.get(attributeName);
|
||||
if (value != null && SUPPORTED_PROPERTY_TYPES.contains(value.getClass())) {
|
||||
try {
|
||||
jmsMessage.setObjectProperty(attributeName, value);
|
||||
Set<String> headerNames = headers.keySet();
|
||||
for (String headerName : headerNames) {
|
||||
if (StringUtils.hasText(headerName) && !headerName.startsWith(JmsHeaders.PREFIX)) {
|
||||
Object value = headers.get(headerName);
|
||||
if (value != null && SUPPORTED_PROPERTY_TYPES.contains(value.getClass())) {
|
||||
try {
|
||||
String propertyName = this.fromHeaderName(headerName);
|
||||
jmsMessage.setObjectProperty(propertyName, value);
|
||||
}
|
||||
catch (Exception e) {
|
||||
if (headerName.startsWith("JMSX")) {
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("skipping reserved header, it cannot be set by client: " + headerName);
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
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);
|
||||
}
|
||||
else if (logger.isWarnEnabled()) {
|
||||
logger.warn("failed to map Message header '" + headerName + "' to JMS property", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -174,7 +201,8 @@ public class DefaultJmsHeaderMapper implements JmsHeaderMapper {
|
||||
while (jmsPropertyNames.hasMoreElements()) {
|
||||
String propertyName = jmsPropertyNames.nextElement().toString();
|
||||
try {
|
||||
headers.put(propertyName, jmsMessage.getObjectProperty(propertyName));
|
||||
String headerName = this.toHeaderName(propertyName);
|
||||
headers.put(headerName, jmsMessage.getObjectProperty(propertyName));
|
||||
}
|
||||
catch (Exception e) {
|
||||
if (logger.isWarnEnabled()) {
|
||||
@@ -193,4 +221,26 @@ public class DefaultJmsHeaderMapper implements JmsHeaderMapper {
|
||||
return headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the outbound prefix if necessary.
|
||||
*/
|
||||
private String fromHeaderName(String headerName) {
|
||||
String propertyName = headerName;
|
||||
if (StringUtils.hasText(this.outboundPrefix) && !propertyName.startsWith(this.outboundPrefix)) {
|
||||
propertyName = this.outboundPrefix + headerName;
|
||||
}
|
||||
return propertyName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the inbound prefix if necessary.
|
||||
*/
|
||||
private String toHeaderName(String propertyName) {
|
||||
String headerName = propertyName;
|
||||
if (StringUtils.hasText(this.inboundPrefix) && !headerName.startsWith(this.inboundPrefix)) {
|
||||
headerName = this.inboundPrefix + propertyName;
|
||||
}
|
||||
return headerName;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -129,6 +129,21 @@ public class DefaultJmsHeaderMapperTests {
|
||||
assertEquals(123, ((Integer) value).intValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserDefinedPropertyMappedFromHeaderWithCustomPrefix() throws JMSException {
|
||||
Message<String> message = MessageBuilder.withPayload("test")
|
||||
.setHeader("foo", new Integer(123))
|
||||
.build();
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
mapper.setOutboundPrefix("custom_");
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
mapper.fromHeaders(message.getHeaders(), jmsMessage);
|
||||
Object value = jmsMessage.getObjectProperty("custom_foo");
|
||||
assertNotNull(value);
|
||||
assertEquals(Integer.class, value.getClass());
|
||||
assertEquals(123, ((Integer) value).intValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserDefinedPropertyWithUnsupportedType() throws JMSException {
|
||||
Destination destination = new Destination() {};
|
||||
@@ -202,6 +217,19 @@ public class DefaultJmsHeaderMapperTests {
|
||||
assertEquals(123, ((Integer) attrib).intValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserDefinedPropertyMappedToHeaderWithCustomPrefix() throws JMSException {
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
jmsMessage.setIntProperty("foo", 123);
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
mapper.setInboundPrefix("custom_");
|
||||
Map<String, Object> headers = mapper.toHeaders(jmsMessage);
|
||||
Object header = headers.get("custom_foo");
|
||||
assertNotNull(header);
|
||||
assertEquals(Integer.class, header.getClass());
|
||||
assertEquals(123, ((Integer) header).intValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPropertyMappingExceptionIsNotFatal() throws JMSException {
|
||||
Message<String> message = MessageBuilder.withPayload("test")
|
||||
|
||||
Reference in New Issue
Block a user