Added MessageHeaders and MessageBuilder. Messages are now immutable (including header maps).
This commit is contained in:
@@ -60,13 +60,13 @@ public abstract class AbstractRemotingHandler implements MessageHandler {
|
||||
this.getClass().getName() + " expects a Serializable payload type " +
|
||||
"but encountered '" + message.getPayload().getClass().getName() + "'");
|
||||
}
|
||||
for (String attributeName : message.getHeader().getAttributeNames()) {
|
||||
Object attribute = message.getHeader().getAttribute(attributeName);
|
||||
for (String headerName : message.getHeaders().keySet()) {
|
||||
Object attribute = message.getHeaders().get(headerName);
|
||||
if (!(attribute instanceof Serializable)) {
|
||||
throw new MessageHandlingException(message,
|
||||
this.getClass().getName() + " expects Serializable attribute types " +
|
||||
"but encountered '" + attribute.getClass().getName() + "' for the attribute '" +
|
||||
attributeName + "'");
|
||||
headerName + "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
|
||||
package org.springframework.integration.adapter;
|
||||
|
||||
import org.springframework.integration.message.MessageHeader;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.integration.message.MessageHeaders;
|
||||
|
||||
/**
|
||||
* Strategy interface for mapping between a source or target object and an
|
||||
@@ -26,8 +28,8 @@ import org.springframework.integration.message.MessageHeader;
|
||||
*/
|
||||
public interface MessageHeaderMapper<T> {
|
||||
|
||||
void mapFromMessageHeader(MessageHeader header, T target);
|
||||
void mapFromMessageHeaders(MessageHeaders headers, T target);
|
||||
|
||||
void mapToMessageHeader(T source, MessageHeader header);
|
||||
Map<String, Object> mapToMessageHeaders(T source);
|
||||
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.springframework.integration.message.Message;
|
||||
import org.springframework.integration.message.MessageBuilder;
|
||||
import org.springframework.integration.message.MessageCreator;
|
||||
import org.springframework.integration.message.MessageDeliveryAware;
|
||||
import org.springframework.integration.message.MessagingException;
|
||||
@@ -64,6 +65,7 @@ public abstract class AbstractDirectorySource implements MessageSource<Object>,
|
||||
return messageCreator;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public final Message receive() {
|
||||
try {
|
||||
this.establishConnection();
|
||||
@@ -73,9 +75,10 @@ public abstract class AbstractDirectorySource implements MessageSource<Object>,
|
||||
if (!getDirectoryContentManager().getBacklog().isEmpty()) {
|
||||
File file = retrieveNextFile();
|
||||
Message message = this.messageCreator.createMessage(file);
|
||||
message.getHeader().setProperty(FileNameGenerator.FILENAME_PROPERTY_KEY, file.getName());
|
||||
message.getHeader().setAttribute(FILE_INFO_PROPERTY,
|
||||
getDirectoryContentManager().getBacklog().get(file.getName()));
|
||||
message = MessageBuilder.fromMessage(message)
|
||||
.setHeader(FileNameGenerator.FILENAME_PROPERTY_KEY, file.getName())
|
||||
.setHeader(FILE_INFO_PROPERTY, getDirectoryContentManager().getBacklog().get(file.getName()))
|
||||
.build();
|
||||
return message;
|
||||
}
|
||||
return null;
|
||||
@@ -89,7 +92,7 @@ public abstract class AbstractDirectorySource implements MessageSource<Object>,
|
||||
}
|
||||
|
||||
public void onSend(Message<?> message) {
|
||||
String filename = message.getHeader().getProperty(FileNameGenerator.FILENAME_PROPERTY_KEY);
|
||||
String filename = message.getHeaders().get(FileNameGenerator.FILENAME_PROPERTY_KEY, String.class);
|
||||
if (StringUtils.hasText(filename)) {
|
||||
this.directoryContentManager.fileProcessed(filename);
|
||||
}
|
||||
|
||||
@@ -28,9 +28,9 @@ import org.springframework.util.StringUtils;
|
||||
public class DefaultFileNameGenerator implements FileNameGenerator {
|
||||
|
||||
public String generateFileName(Message<?> message) {
|
||||
String filenameProperty = message.getHeader().getProperty(FILENAME_PROPERTY_KEY);
|
||||
String filenameProperty = message.getHeaders().get(FILENAME_PROPERTY_KEY, String.class);
|
||||
return StringUtils.hasText(filenameProperty) ?
|
||||
filenameProperty : message.getId() + "-" + System.currentTimeMillis() + ".msg";
|
||||
filenameProperty : message.getId() + ".msg";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,7 +18,9 @@ package org.springframework.integration.adapter.jms;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.jms.Destination;
|
||||
@@ -27,7 +29,7 @@ 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.MessageHeaders;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
@@ -44,27 +46,27 @@ public class DefaultJmsHeaderMapper implements MessageHeaderMapper<javax.jms.Mes
|
||||
private final Log logger = LogFactory.getLog(this.getClass());
|
||||
|
||||
|
||||
public void mapFromMessageHeader(MessageHeader header, javax.jms.Message jmsMessage) {
|
||||
public void mapFromMessageHeaders(MessageHeaders headers, javax.jms.Message jmsMessage) {
|
||||
try {
|
||||
Object jmsCorrelationId = header.getAttribute(JmsAttributeKeys.CORRELATION_ID);
|
||||
Object jmsCorrelationId = headers.get(JmsAttributeKeys.CORRELATION_ID);
|
||||
if (jmsCorrelationId != null && (jmsCorrelationId instanceof String)) {
|
||||
jmsMessage.setJMSCorrelationID((String) jmsCorrelationId);
|
||||
}
|
||||
Object jmsReplyTo = header.getAttribute(JmsAttributeKeys.REPLY_TO);
|
||||
Object jmsReplyTo = headers.get(JmsAttributeKeys.REPLY_TO);
|
||||
if (jmsReplyTo != null && (jmsReplyTo instanceof Destination)) {
|
||||
jmsMessage.setJMSReplyTo((Destination) jmsReplyTo);
|
||||
}
|
||||
Object jmsType = header.getAttribute(JmsAttributeKeys.TYPE);
|
||||
Object jmsType = headers.get(JmsAttributeKeys.TYPE);
|
||||
if (jmsType != null && (jmsType instanceof String)) {
|
||||
jmsMessage.setJMSType((String) jmsType);
|
||||
}
|
||||
String prefix = JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX;
|
||||
Set<String> attributeNames = header.getAttributeNames();
|
||||
Set<String> attributeNames = headers.keySet();
|
||||
for (String attributeName : attributeNames) {
|
||||
if (attributeName.startsWith(prefix)) {
|
||||
String jmsAttributeName = attributeName.substring(prefix.length());
|
||||
if (StringUtils.hasText(attributeName)) {
|
||||
Object value = header.getAttribute(attributeName);
|
||||
Object value = headers.get(attributeName);
|
||||
if (value != null && SUPPORTED_PROPERTY_TYPES.contains(value.getClass())) {
|
||||
try {
|
||||
jmsMessage.setObjectProperty(jmsAttributeName, value);
|
||||
@@ -86,26 +88,27 @@ public class DefaultJmsHeaderMapper implements MessageHeaderMapper<javax.jms.Mes
|
||||
}
|
||||
}
|
||||
|
||||
public void mapToMessageHeader(javax.jms.Message jmsMessage, MessageHeader header) {
|
||||
public Map<String, Object> mapToMessageHeaders(javax.jms.Message jmsMessage) {
|
||||
Map<String, Object> headers = new HashMap<String, Object>();
|
||||
try {
|
||||
String correlationId = jmsMessage.getJMSCorrelationID();
|
||||
if (correlationId != null) {
|
||||
header.setAttribute(JmsAttributeKeys.CORRELATION_ID, correlationId);
|
||||
headers.put(JmsAttributeKeys.CORRELATION_ID, correlationId);
|
||||
}
|
||||
Destination replyTo = jmsMessage.getJMSReplyTo();
|
||||
if (replyTo != null) {
|
||||
header.setAttribute(JmsAttributeKeys.REPLY_TO, replyTo);
|
||||
headers.put(JmsAttributeKeys.REPLY_TO, replyTo);
|
||||
}
|
||||
header.setAttribute(JmsAttributeKeys.REDELIVERED, jmsMessage.getJMSRedelivered());
|
||||
headers.put(JmsAttributeKeys.REDELIVERED, jmsMessage.getJMSRedelivered());
|
||||
String type = jmsMessage.getJMSType();
|
||||
if (type != null) {
|
||||
header.setAttribute(JmsAttributeKeys.TYPE, type);
|
||||
headers.put(JmsAttributeKeys.TYPE, type);
|
||||
}
|
||||
Enumeration<?> jmsPropertyNames = jmsMessage.getPropertyNames();
|
||||
if (jmsPropertyNames != null) {
|
||||
while (jmsPropertyNames.hasMoreElements()) {
|
||||
String propertyName = jmsPropertyNames.nextElement().toString();
|
||||
header.setAttribute(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + propertyName,
|
||||
headers.put(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + propertyName,
|
||||
jmsMessage.getObjectProperty(propertyName));
|
||||
}
|
||||
}
|
||||
@@ -115,6 +118,7 @@ public class DefaultJmsHeaderMapper implements MessageHeaderMapper<javax.jms.Mes
|
||||
logger.warn("error occurred while mapping properties to MessageHeader", t);
|
||||
}
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,12 +16,15 @@
|
||||
|
||||
package org.springframework.integration.adapter.jms;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javax.jms.JMSException;
|
||||
import javax.jms.Session;
|
||||
|
||||
import org.springframework.integration.adapter.MessageHeaderMapper;
|
||||
import org.springframework.integration.message.GenericMessage;
|
||||
import org.springframework.integration.message.Message;
|
||||
import org.springframework.integration.message.MessageBuilder;
|
||||
import org.springframework.integration.message.MessageHeaders;
|
||||
import org.springframework.integration.message.MessagingException;
|
||||
import org.springframework.jms.support.converter.MessageConversionException;
|
||||
import org.springframework.jms.support.converter.MessageConverter;
|
||||
@@ -52,8 +55,8 @@ public class HeaderMappingMessageConverter implements MessageConverter {
|
||||
|
||||
public Object fromMessage(javax.jms.Message jmsMessage) throws JMSException, MessageConversionException {
|
||||
Object payload = this.converter.fromMessage(jmsMessage);
|
||||
Message<?> message = new GenericMessage<Object>(payload);
|
||||
this.headerMapper.mapToMessageHeader(jmsMessage, message.getHeader());
|
||||
Map<String, Object> headerMap = this.headerMapper.mapToMessageHeaders(jmsMessage);
|
||||
Message<?> message = MessageBuilder.fromPayload(payload).copyHeaders(new MessageHeaders(headerMap)).build();
|
||||
return message;
|
||||
}
|
||||
|
||||
@@ -64,7 +67,7 @@ public class HeaderMappingMessageConverter implements MessageConverter {
|
||||
}
|
||||
Message<?> message = (Message<?>) object;
|
||||
javax.jms.Message jmsMessage = this.converter.toMessage(message.getPayload(), session);
|
||||
this.headerMapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
this.headerMapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage);
|
||||
return jmsMessage;
|
||||
}
|
||||
|
||||
|
||||
@@ -59,12 +59,12 @@ public class DefaultMailHeaderGenerator extends AbstractMailHeaderGenerator {
|
||||
|
||||
|
||||
private String retrieveAsString(Message<?> message, String key) {
|
||||
Object value = message.getHeader().getAttribute(key);
|
||||
Object value = message.getHeaders().get(key);
|
||||
return (value instanceof String) ? (String) value : null;
|
||||
}
|
||||
|
||||
private String[] retrieveAsStringArray(Message<?> message, String key) {
|
||||
Object value = message.getHeader().getAttribute(key);
|
||||
Object value = message.getHeaders().get(key);
|
||||
if (value instanceof String[]) {
|
||||
return (String[]) value;
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ public class ApplicationEventTargetTests {
|
||||
bus.registerTarget("adapter", adapter, channel, null);
|
||||
bus.start();
|
||||
assertEquals(1, latch.getCount());
|
||||
channel.send(new StringMessage("123", "testing"));
|
||||
channel.send(new StringMessage("testing"));
|
||||
assertEquals(0, latch.getCount());
|
||||
bus.stop();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2007 the original author or authors.
|
||||
* Copyright 2002-2008 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.
|
||||
@@ -23,6 +23,7 @@ import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.message.GenericMessage;
|
||||
import org.springframework.integration.message.Message;
|
||||
import org.springframework.integration.message.MessageBuilder;
|
||||
|
||||
/**
|
||||
* @author Mark Fisher
|
||||
@@ -31,8 +32,8 @@ public class DefaultFileNameGeneratorTests {
|
||||
|
||||
@Test
|
||||
public void testWithFileNamePropertyProvided() {
|
||||
Message<String> message = new GenericMessage<String>("123", "testing");
|
||||
message.getHeader().setProperty(FileNameGenerator.FILENAME_PROPERTY_KEY, "foo.bar");
|
||||
Message<String> message = MessageBuilder.fromPayload("testing")
|
||||
.setHeader(FileNameGenerator.FILENAME_PROPERTY_KEY, "foo.bar").build();
|
||||
FileNameGenerator generator = new DefaultFileNameGenerator();
|
||||
String filename = generator.generateFileName(message);
|
||||
assertEquals("foo.bar", filename);
|
||||
@@ -40,10 +41,10 @@ public class DefaultFileNameGeneratorTests {
|
||||
|
||||
@Test
|
||||
public void testWithoutFileNamePropertyProvided() {
|
||||
Message<String> message = new GenericMessage<String>("123", "testing");
|
||||
Message<String> message = new GenericMessage<String>("testing");
|
||||
FileNameGenerator generator = new DefaultFileNameGenerator();
|
||||
String filename = generator.generateFileName(message);
|
||||
assertTrue(filename.startsWith("123-"));
|
||||
assertTrue(filename.startsWith("" + message.getId()));
|
||||
assertTrue(filename.endsWith(".msg"));
|
||||
}
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ public class HttpInvokerGatewayTests {
|
||||
Executors.newSingleThreadExecutor().execute(new Runnable() {
|
||||
public void run() {
|
||||
Message<?> message = channel.receive();
|
||||
MessageChannel replyChannel = (MessageChannel) message.getHeader().getReturnAddress();
|
||||
MessageChannel replyChannel = (MessageChannel) message.getHeaders().getReturnAddress();
|
||||
replyChannel.send(new StringMessage(message.getPayload().toString().toUpperCase()));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -21,12 +21,14 @@ import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertSame;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javax.jms.Destination;
|
||||
import javax.jms.JMSException;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.message.StringMessage;
|
||||
import org.springframework.integration.message.Message;
|
||||
import org.springframework.integration.message.MessageBuilder;
|
||||
|
||||
/**
|
||||
* @author Mark Fisher
|
||||
@@ -35,77 +37,78 @@ public class DefaultJmsHeaderMapperTests {
|
||||
|
||||
@Test
|
||||
public void testJmsReplyToMappedFromHeader() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
Destination replyTo = new Destination() {};
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.REPLY_TO, replyTo);
|
||||
Message<String> message = MessageBuilder.fromPayload("test")
|
||||
.setHeader(JmsAttributeKeys.REPLY_TO, replyTo).build();
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage);
|
||||
assertNotNull(jmsMessage.getJMSReplyTo());
|
||||
assertSame(replyTo, jmsMessage.getJMSReplyTo());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJmsReplyToIgnoredIfIncorrectType() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.REPLY_TO, "not-a-destination");
|
||||
Message<String> message = MessageBuilder.fromPayload("test")
|
||||
.setHeader(JmsAttributeKeys.REPLY_TO, "not-a-destination").build();
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage);
|
||||
assertNull(jmsMessage.getJMSReplyTo());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJmsCorrelationIdMappedFromHeader() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
String jmsCorrelationId = "ABC-123";
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.CORRELATION_ID, jmsCorrelationId);
|
||||
Message<String> message = MessageBuilder.fromPayload("test")
|
||||
.setHeader(JmsAttributeKeys.CORRELATION_ID, jmsCorrelationId).build();
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage);
|
||||
assertNotNull(jmsMessage.getJMSCorrelationID());
|
||||
assertEquals(jmsCorrelationId, jmsMessage.getJMSCorrelationID());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJmsCorrelationIdIgnoredIfIncorrectType() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.CORRELATION_ID, new Integer(123));
|
||||
Message<String> message = MessageBuilder.fromPayload("test")
|
||||
.setHeader(JmsAttributeKeys.CORRELATION_ID, new Integer(123)).build();
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage);
|
||||
assertNull(jmsMessage.getJMSCorrelationID());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJmsTypeMappedFromHeader() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
String jmsType = "testing";
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.TYPE, jmsType);
|
||||
Message<String> message = MessageBuilder.fromPayload("test")
|
||||
.setHeader(JmsAttributeKeys.TYPE, jmsType).build();
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage);
|
||||
assertNotNull(jmsMessage.getJMSType());
|
||||
assertEquals(jmsType, jmsMessage.getJMSType());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJmsTypeIgnoredIfIncorrectType() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.TYPE, new Integer(123));
|
||||
Message<String> message = MessageBuilder.fromPayload("test")
|
||||
.setHeader(JmsAttributeKeys.TYPE, new Integer(123)).build();
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage);
|
||||
assertNull(jmsMessage.getJMSType());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserDefinedPropertyMappedFromHeader() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "foo", new Integer(123));
|
||||
Message<String> message = MessageBuilder.fromPayload("test")
|
||||
.setHeader(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "foo", new Integer(123))
|
||||
.build();
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage);
|
||||
Object value = jmsMessage.getObjectProperty("foo");
|
||||
assertNotNull(value);
|
||||
assertEquals(Integer.class, value.getClass());
|
||||
@@ -114,63 +117,60 @@ public class DefaultJmsHeaderMapperTests {
|
||||
|
||||
@Test
|
||||
public void testUserDefinedPropertyWithUnsupportedType() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
Destination destination = new Destination() {};
|
||||
message.getHeader().setAttribute(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "destination", destination);
|
||||
Message<String> message = MessageBuilder.fromPayload("test")
|
||||
.setHeader(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "destination", destination)
|
||||
.build();
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage);
|
||||
Object value = jmsMessage.getObjectProperty("foo");
|
||||
assertNull(value);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJmsReplyToMappedToHeader() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
Destination replyTo = new Destination() {};
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
jmsMessage.setJMSReplyTo(replyTo);
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
mapper.mapToMessageHeader(jmsMessage, message.getHeader());
|
||||
Object attrib = message.getHeader().getAttribute(JmsAttributeKeys.REPLY_TO);
|
||||
Map<String, Object> headers = mapper.mapToMessageHeaders(jmsMessage);
|
||||
Object attrib = headers.get(JmsAttributeKeys.REPLY_TO);
|
||||
assertNotNull(attrib);
|
||||
assertSame(replyTo, attrib);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJmsCorrelationIdMappedToHeader() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
String correlationId = "ABC-123";
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
jmsMessage.setJMSCorrelationID(correlationId);
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
mapper.mapToMessageHeader(jmsMessage, message.getHeader());
|
||||
Object attrib = message.getHeader().getAttribute(JmsAttributeKeys.CORRELATION_ID);
|
||||
Map<String, Object> headers = mapper.mapToMessageHeaders(jmsMessage);
|
||||
Object attrib = headers.get(JmsAttributeKeys.CORRELATION_ID);
|
||||
assertNotNull(attrib);
|
||||
assertSame(correlationId, attrib);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJmsTypeMappedToHeader() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
String type = "testing";
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
jmsMessage.setJMSType(type);
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
mapper.mapToMessageHeader(jmsMessage, message.getHeader());
|
||||
Object attrib = message.getHeader().getAttribute(JmsAttributeKeys.TYPE);
|
||||
Map<String, Object> headers = mapper.mapToMessageHeaders(jmsMessage);
|
||||
Object attrib = headers.get(JmsAttributeKeys.TYPE);
|
||||
assertNotNull(attrib);
|
||||
assertSame(type, attrib);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserDefinedPropertyMappedToHeader() throws JMSException {
|
||||
StringMessage message = new StringMessage("test");
|
||||
javax.jms.Message jmsMessage = new StubTextMessage();
|
||||
jmsMessage.setIntProperty("foo", 123);
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
mapper.mapToMessageHeader(jmsMessage, message.getHeader());
|
||||
Object attrib = message.getHeader().getAttribute(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "foo");
|
||||
Map<String, Object> headers = mapper.mapToMessageHeaders(jmsMessage);
|
||||
Object attrib = headers.get(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "foo");
|
||||
assertNotNull(attrib);
|
||||
assertEquals(Integer.class, attrib.getClass());
|
||||
assertEquals(123, ((Integer) attrib).intValue());
|
||||
@@ -178,10 +178,11 @@ public class DefaultJmsHeaderMapperTests {
|
||||
|
||||
@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));
|
||||
Message<String> message = MessageBuilder.fromPayload("test")
|
||||
.setHeader(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "foo", new Integer(123))
|
||||
.setHeader(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "bad", new Integer(456))
|
||||
.setHeader(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "bar", new Integer(789))
|
||||
.build();
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage() {
|
||||
@Override
|
||||
@@ -192,7 +193,7 @@ public class DefaultJmsHeaderMapperTests {
|
||||
super.setObjectProperty(name, value);
|
||||
}
|
||||
};
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage);
|
||||
Object foo = jmsMessage.getObjectProperty("foo");
|
||||
assertNotNull(foo);
|
||||
Object bar = jmsMessage.getObjectProperty("bar");
|
||||
@@ -203,10 +204,11 @@ public class DefaultJmsHeaderMapperTests {
|
||||
|
||||
@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));
|
||||
Message<String> message = MessageBuilder.fromPayload("test")
|
||||
.setHeader(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "foo", new Integer(123))
|
||||
.setHeader(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "bad", new Integer(456))
|
||||
.setHeader(JmsAttributeKeys.USER_DEFINED_ATTRIBUTE_PREFIX + "bar", new Integer(789))
|
||||
.build();
|
||||
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
|
||||
javax.jms.Message jmsMessage = new StubTextMessage() {
|
||||
@Override
|
||||
@@ -217,7 +219,7 @@ public class DefaultJmsHeaderMapperTests {
|
||||
super.setObjectProperty(name, value);
|
||||
}
|
||||
};
|
||||
mapper.mapFromMessageHeader(message.getHeader(), jmsMessage);
|
||||
mapper.mapFromMessageHeaders(message.getHeaders(), jmsMessage);
|
||||
Object foo = jmsMessage.getObjectProperty("foo");
|
||||
assertNotNull(foo);
|
||||
Object bar = jmsMessage.getObjectProperty("bar");
|
||||
|
||||
@@ -122,8 +122,8 @@ public class JmsSourceParserTests {
|
||||
Message<?> message = source.receive();
|
||||
assertNotNull("message should not be null", message);
|
||||
assertEquals("polling-test", message.getPayload());
|
||||
assertEquals("foo", message.getHeader().getProperty("testProperty"));
|
||||
assertEquals(new Integer(123), message.getHeader().getAttribute("testAttribute"));
|
||||
assertEquals("foo", message.getHeaders().get("testProperty"));
|
||||
assertEquals(new Integer(123), message.getHeaders().get("testAttribute"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -16,22 +16,27 @@
|
||||
|
||||
package org.springframework.integration.adapter.jms.config;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.jms.Message;
|
||||
|
||||
import org.springframework.integration.adapter.MessageHeaderMapper;
|
||||
import org.springframework.integration.message.MessageHeader;
|
||||
import org.springframework.integration.message.MessageHeaders;
|
||||
|
||||
/**
|
||||
* @author Mark Fisher
|
||||
*/
|
||||
public class TestMessageHeaderMapper implements MessageHeaderMapper<Message> {
|
||||
|
||||
public void mapFromMessageHeader(MessageHeader header, Message target) {
|
||||
public void mapFromMessageHeaders(MessageHeaders headers, Message target) {
|
||||
}
|
||||
|
||||
public void mapToMessageHeader(Message source, MessageHeader header) {
|
||||
header.setProperty("testProperty", "foo");
|
||||
header.setAttribute("testAttribute", new Integer(123));
|
||||
public Map<String, Object> mapToMessageHeaders(Message source) {
|
||||
Map<String, Object> headerMap = new HashMap<String, Object>();
|
||||
headerMap.put("testProperty", "foo");
|
||||
headerMap.put("testAttribute", new Integer(123));
|
||||
return headerMap;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.message.GenericMessage;
|
||||
import org.springframework.integration.message.MessageBuilder;
|
||||
import org.springframework.integration.message.StringMessage;
|
||||
import org.springframework.mail.SimpleMailMessage;
|
||||
|
||||
@@ -92,13 +93,14 @@ public class MailTargetTests {
|
||||
|
||||
@Test
|
||||
public void testDefaultMailHeaderGenerator() {
|
||||
StringMessage message = new StringMessage(MailTestsHelper.MESSAGE_TEXT);
|
||||
message.getHeader().setAttribute(MailAttributeKeys.SUBJECT, MailTestsHelper.SUBJECT);
|
||||
message.getHeader().setAttribute(MailAttributeKeys.TO, MailTestsHelper.TO);
|
||||
message.getHeader().setAttribute(MailAttributeKeys.CC, MailTestsHelper.CC);
|
||||
message.getHeader().setAttribute(MailAttributeKeys.BCC, MailTestsHelper.BCC);
|
||||
message.getHeader().setAttribute(MailAttributeKeys.FROM, MailTestsHelper.FROM);
|
||||
message.getHeader().setAttribute(MailAttributeKeys.REPLY_TO, MailTestsHelper.REPLY_TO);
|
||||
org.springframework.integration.message.Message<String> message =
|
||||
MessageBuilder.fromPayload(MailTestsHelper.MESSAGE_TEXT)
|
||||
.setHeader(MailAttributeKeys.SUBJECT, MailTestsHelper.SUBJECT)
|
||||
.setHeader(MailAttributeKeys.TO, MailTestsHelper.TO)
|
||||
.setHeader(MailAttributeKeys.CC, MailTestsHelper.CC)
|
||||
.setHeader(MailAttributeKeys.BCC, MailTestsHelper.BCC)
|
||||
.setHeader(MailAttributeKeys.FROM, MailTestsHelper.FROM)
|
||||
.setHeader(MailAttributeKeys.REPLY_TO, MailTestsHelper.REPLY_TO).build();
|
||||
this.mailTarget.send(message);
|
||||
SimpleMailMessage mailMessage = MailTestsHelper.createSimpleMailMessage();
|
||||
assertEquals("no mime message should have been sent",
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.junit.Test;
|
||||
import org.springframework.integration.handler.MessageHandler;
|
||||
import org.springframework.integration.message.GenericMessage;
|
||||
import org.springframework.integration.message.Message;
|
||||
import org.springframework.integration.message.MessageBuilder;
|
||||
import org.springframework.integration.message.MessageHandlingException;
|
||||
import org.springframework.integration.message.StringMessage;
|
||||
import org.springframework.remoting.RemoteLookupFailureException;
|
||||
@@ -50,6 +51,7 @@ public class RmiHandlerTests {
|
||||
exporter.afterPropertiesSet();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testSerializablePayload() throws RemoteException {
|
||||
Message<?> replyMessage = handler.handle(new StringMessage("test"));
|
||||
@@ -59,20 +61,11 @@ public class RmiHandlerTests {
|
||||
|
||||
@Test
|
||||
public void testSerializableAttribute() throws RemoteException {
|
||||
Message<?> requestMessage = new StringMessage("test");
|
||||
requestMessage.getHeader().setAttribute("testAttribute", "foo");
|
||||
Message<String> requestMessage = MessageBuilder.fromPayload("test")
|
||||
.setHeader("testAttribute", "foo").build();
|
||||
Message<?> replyMessage = handler.handle(requestMessage);
|
||||
assertNotNull(replyMessage);
|
||||
assertEquals("foo", replyMessage.getHeader().getAttribute("testAttribute"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProperty() throws RemoteException {
|
||||
Message<?> requestMessage = new StringMessage("test");
|
||||
requestMessage.getHeader().setProperty("testProperty", "bar");
|
||||
Message<?> replyMessage = handler.handle(requestMessage);
|
||||
assertNotNull(replyMessage);
|
||||
assertEquals("bar", replyMessage.getHeader().getProperty("testProperty"));
|
||||
assertEquals("foo", replyMessage.getHeaders().get("testAttribute"));
|
||||
}
|
||||
|
||||
@Test(expected=MessageHandlingException.class)
|
||||
@@ -84,8 +77,8 @@ public class RmiHandlerTests {
|
||||
|
||||
@Test(expected=MessageHandlingException.class)
|
||||
public void testNonSerializableAttribute() throws RemoteException {
|
||||
Message<?> requestMessage = new StringMessage("test");
|
||||
requestMessage.getHeader().setAttribute("testAttribute", new NonSerializableTestObject());
|
||||
Message<String> requestMessage = MessageBuilder.fromPayload("test")
|
||||
.setHeader("testAttribute", new NonSerializableTestObject()).build();
|
||||
handler.handle(requestMessage);
|
||||
}
|
||||
|
||||
@@ -135,7 +128,7 @@ public class RmiHandlerTests {
|
||||
private static class TestHandler implements MessageHandler {
|
||||
|
||||
public Message<?> handle(Message<?> message) {
|
||||
return new GenericMessage<String>(message.getPayload().toString().toUpperCase(), message.getHeader());
|
||||
return new GenericMessage<String>(message.getPayload().toString().toUpperCase(), message.getHeaders());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user