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

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