Added MessageHeaders and MessageBuilder. Messages are now immutable (including header maps).

This commit is contained in:
Mark Fisher
2008-07-17 22:58:56 +00:00
parent b9ea75ea98
commit 2c95306f63
91 changed files with 1154 additions and 1083 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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

View File

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

View File

@@ -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",

View File

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