INT-1286 first step: the history header is now stored as a List<Properties> instead of relying on custom Object types. Also, the header is not mutated directly but now history is written by copying the Message. The next step might involve moving that into the MessageBuilder.
This commit is contained in:
@@ -18,6 +18,7 @@ package org.springframework.integration.handler;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.HashMap;
|
||||
@@ -29,6 +30,7 @@ import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.MessageHandlingException;
|
||||
import org.springframework.integration.MessageHeaders;
|
||||
import org.springframework.integration.MessagingException;
|
||||
import org.springframework.integration.annotation.Header;
|
||||
import org.springframework.integration.annotation.Headers;
|
||||
@@ -130,15 +132,15 @@ public class MethodInvokingMessageProcessorAnnotationTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
public void fromMessageWithMapAndObjectMethod() throws Exception {
|
||||
Method method = TestService.class.getMethod("mapHeadersAndPayload", Map.class, Object.class);
|
||||
MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method);
|
||||
Message<String> message = MessageBuilder.withPayload("test")
|
||||
.setHeader("prop1", "foo").setHeader("prop2", "bar").build();
|
||||
Map result = (Map) processor.processMessage(message);
|
||||
// Map also contains id, timestamp, and history
|
||||
assertEquals(6, result.size());
|
||||
Map<?, ?> result = (Map<?, ?>) processor.processMessage(message);
|
||||
assertEquals(5, result.size());
|
||||
assertTrue(result.containsKey(MessageHeaders.ID));
|
||||
assertTrue(result.containsKey(MessageHeaders.TIMESTAMP));
|
||||
assertEquals("foo", result.get("prop1"));
|
||||
assertEquals("bar", result.get("prop2"));
|
||||
assertEquals("test", result.get("payload"));
|
||||
@@ -208,7 +210,6 @@ public class MethodInvokingMessageProcessorAnnotationTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
public void multipleAnnotatedArgs() throws Exception {
|
||||
Message<?> message = this.getMessage();
|
||||
Method method = TestService.class.getMethod("multipleAnnotatedArguments",
|
||||
@@ -229,14 +230,13 @@ public class MethodInvokingMessageProcessorAnnotationTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
public void fromMessageToPayload() throws Exception {
|
||||
Method method = TestService.class.getMethod("mapOnly", Map.class);
|
||||
MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method);
|
||||
Message<Employee> message = MessageBuilder.withPayload(employee).setHeader("number", "jkl").build();
|
||||
Object result = processor.processMessage(message);
|
||||
Assert.assertTrue(result instanceof Map);
|
||||
Assert.assertEquals("jkl", ((Map) result).get("number"));
|
||||
Assert.assertEquals("jkl", ((Map<?, ?>) result).get("number"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -342,19 +342,16 @@ public class MethodInvokingMessageProcessorAnnotationTests {
|
||||
return headers;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public Map mapPayload(Map map) {
|
||||
public Map<?, ?> mapPayload(Map<?, ?> map) {
|
||||
return map;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public Map mapHeaders(@Headers Map map) {
|
||||
public Map<?, ?> mapHeaders(@Headers Map<?, ?> map) {
|
||||
return map;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object mapHeadersAndPayload(Map headers, Object payload) {
|
||||
Map map = new HashMap(headers);
|
||||
public Object mapHeadersAndPayload(Map<String, Object> headers, Object payload) {
|
||||
Map<String, Object> map = new HashMap<String, Object>(headers);
|
||||
map.put("payload", payload);
|
||||
return map;
|
||||
}
|
||||
|
||||
@@ -20,9 +20,11 @@ import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertFalse;
|
||||
import static junit.framework.Assert.assertTrue;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
@@ -33,9 +35,6 @@ import org.springframework.beans.factory.parsing.BeanDefinitionParsingException;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.MessageDeliveryException;
|
||||
import org.springframework.integration.MessageHandlingException;
|
||||
import org.springframework.integration.MessageRejectedException;
|
||||
import org.springframework.integration.channel.DirectChannel;
|
||||
import org.springframework.integration.config.ConsumerEndpointFactoryBean;
|
||||
import org.springframework.integration.core.MessageChannel;
|
||||
@@ -69,72 +68,70 @@ public class MessageHistoryIntegrationTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tetsMessageHistoryWithHistoryWriter() {
|
||||
public void testMessageHistoryWithHistoryWriter() {
|
||||
ApplicationContext ac = new ClassPathXmlApplicationContext("messageHistoryWithHistoryWriter.xml", MessageHistoryIntegrationTests.class);
|
||||
SampleGateway gateway = ac.getBean("sampleGateway", SampleGateway.class);
|
||||
DirectChannel endOfThePipeChannel = ac.getBean("endOfThePipeChannel", DirectChannel.class);
|
||||
MessageHandler handler = Mockito.spy(new MessageHandler() {
|
||||
public void handleMessage(Message<?> message)
|
||||
throws MessageRejectedException, MessageHandlingException,MessageDeliveryException {
|
||||
System.out.println(message);
|
||||
Iterator<MessageHistoryEvent> historyIterator = message.getHeaders().getHistory().iterator();
|
||||
//1
|
||||
MessageHistoryEvent event = historyIterator.next();
|
||||
assertEquals("gateway", event.getType());
|
||||
assertEquals("sampleGateway", event.getName());
|
||||
//2
|
||||
event = historyIterator.next();
|
||||
assertEquals("channel", event.getType());
|
||||
assertEquals("bridgeInChannel", event.getName());
|
||||
//3
|
||||
event = historyIterator.next();
|
||||
assertEquals("bridge", event.getType());
|
||||
assertEquals("testBridge", event.getName());
|
||||
//4
|
||||
event = historyIterator.next();
|
||||
assertEquals("channel", event.getType());
|
||||
assertEquals("headerEnricherChannel", event.getName());
|
||||
//5
|
||||
event = historyIterator.next();
|
||||
assertEquals("transformer", event.getType());
|
||||
assertEquals("testHeaderEnricher", event.getName());
|
||||
//6
|
||||
event = historyIterator.next();
|
||||
assertEquals("channel", event.getType());
|
||||
assertEquals("chainChannel", event.getName());
|
||||
//7
|
||||
event = historyIterator.next();
|
||||
assertEquals("chain", event.getType());
|
||||
assertEquals("sampleChain", event.getName());
|
||||
//8
|
||||
event = historyIterator.next();
|
||||
assertEquals("channel", event.getType());
|
||||
assertEquals("filterChannel", event.getName());
|
||||
//9
|
||||
event = historyIterator.next();
|
||||
assertEquals("filter", event.getType());
|
||||
assertEquals("testFilter", event.getName());
|
||||
//10
|
||||
event = historyIterator.next();
|
||||
assertEquals("channel", event.getType());
|
||||
assertEquals("splitterChannel", event.getName());
|
||||
//11
|
||||
event = historyIterator.next();
|
||||
assertEquals("splitter", event.getType());
|
||||
assertEquals("testSplitter", event.getName());
|
||||
//12
|
||||
event = historyIterator.next();
|
||||
assertEquals("channel", event.getType());
|
||||
assertEquals("aggregatorChannel", event.getName());
|
||||
//13
|
||||
event = historyIterator.next();
|
||||
assertEquals("aggregator", event.getType());
|
||||
assertEquals("testAggregator", event.getName());
|
||||
//
|
||||
event = historyIterator.next();
|
||||
assertEquals("channel", event.getType());
|
||||
assertEquals("endOfThePipeChannel", event.getName());
|
||||
public void handleMessage(Message<?> message) {
|
||||
Iterator<Properties> historyIterator = message.getHeaders().getHistory().iterator();
|
||||
|
||||
Properties event1 = historyIterator.next();
|
||||
assertEquals("sampleGateway", event1.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("gateway", event1.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event2 = historyIterator.next();
|
||||
assertEquals("bridgeInChannel", event2.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("channel", event2.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event3 = historyIterator.next();
|
||||
assertEquals("testBridge", event3.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("bridge", event3.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event4 = historyIterator.next();
|
||||
assertEquals("headerEnricherChannel", event4.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("channel", event4.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event5 = historyIterator.next();
|
||||
assertEquals("testHeaderEnricher", event5.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("transformer", event5.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event6 = historyIterator.next();
|
||||
assertEquals("chainChannel", event6.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("channel", event6.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event7 = historyIterator.next();
|
||||
assertEquals("sampleChain", event7.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("chain", event7.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event8 = historyIterator.next();
|
||||
assertEquals("filterChannel", event8.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("channel", event8.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event9 = historyIterator.next();
|
||||
assertEquals("testFilter", event9.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("filter", event9.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event10 = historyIterator.next();
|
||||
assertEquals("splitterChannel", event10.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("channel", event10.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event11 = historyIterator.next();
|
||||
assertEquals("testSplitter", event11.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("splitter", event11.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event12 = historyIterator.next();
|
||||
assertEquals("aggregatorChannel", event12.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("channel", event12.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event13 = historyIterator.next();
|
||||
assertEquals("testAggregator", event13.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("aggregator", event13.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
Properties event14 = historyIterator.next();
|
||||
assertEquals("endOfThePipeChannel", event14.getProperty(MessageHistoryWriter.NAME_PROPERTY));
|
||||
assertEquals("channel", event14.getProperty(MessageHistoryWriter.TYPE_PROPERTY));
|
||||
|
||||
MessageChannel replyChannel = (MessageChannel) message.getHeaders().getReplyChannel();
|
||||
replyChannel.send(message);
|
||||
}
|
||||
@@ -147,17 +144,13 @@ public class MessageHistoryIntegrationTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tetsMessageHistoryWithoutHistoryWriter() {
|
||||
public void testMessageHistoryWithoutHistoryWriter() {
|
||||
ApplicationContext ac = new ClassPathXmlApplicationContext("messageHistoryWithoutHistoryWriter.xml", MessageHistoryIntegrationTests.class);
|
||||
SampleGateway gateway = ac.getBean("sampleGateway", SampleGateway.class);
|
||||
DirectChannel endOfThePipeChannel = ac.getBean("endOfThePipeChannel", DirectChannel.class);
|
||||
MessageHandler handler = Mockito.spy(new MessageHandler() {
|
||||
public void handleMessage(Message<?> message)
|
||||
throws MessageRejectedException, MessageHandlingException,MessageDeliveryException {
|
||||
System.out.println(message);
|
||||
Iterator<MessageHistoryEvent> historyIterator = message.getHeaders().getHistory().iterator();
|
||||
assertFalse(historyIterator.hasNext());
|
||||
|
||||
public void handleMessage(Message<?> message) {
|
||||
assertNull(message.getHeaders().getHistory());
|
||||
MessageChannel replyChannel = (MessageChannel) message.getHeaders().getReplyChannel();
|
||||
replyChannel.send(message);
|
||||
}
|
||||
@@ -173,10 +166,8 @@ public class MessageHistoryIntegrationTests {
|
||||
SampleGateway gateway = ac.getBean("sampleGateway", SampleGateway.class);
|
||||
DirectChannel endOfThePipeChannel = ac.getBean("endOfThePipeChannel", DirectChannel.class);
|
||||
MessageHandler handler = Mockito.spy(new MessageHandler() {
|
||||
public void handleMessage(Message<?> message)
|
||||
throws MessageRejectedException, MessageHandlingException,MessageDeliveryException {
|
||||
System.out.println(message);
|
||||
Iterator<MessageHistoryEvent> historyIterator = message.getHeaders().getHistory().iterator();
|
||||
public void handleMessage(Message<?> message) {
|
||||
Iterator<Properties> historyIterator = message.getHeaders().getHistory().iterator();
|
||||
assertTrue(historyIterator.hasNext());
|
||||
MessageChannel replyChannel = (MessageChannel) message.getHeaders().getReplyChannel();
|
||||
replyChannel.send(message);
|
||||
@@ -201,4 +192,5 @@ public class MessageHistoryIntegrationTests {
|
||||
public static interface SampleGateway {
|
||||
public Message<?> echo(String value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -45,7 +45,6 @@ public class OutboundJsonMessageMapperTests {
|
||||
String result = mapper.fromMessage(testMessage);
|
||||
assertTrue(result.contains("\"headers\":{"));
|
||||
assertTrue(result.contains("\"$timestamp\":"+testMessage.getHeaders().getTimestamp()));
|
||||
assertTrue(result.contains("\"$history\":[]"));
|
||||
assertTrue(result.contains("\"$id\":\""+testMessage.getHeaders().getId()+"\""));
|
||||
assertTrue(result.contains("\"payload\":\"myPayloadStuff\""));
|
||||
}
|
||||
@@ -68,7 +67,6 @@ public class OutboundJsonMessageMapperTests {
|
||||
String result = mapper.fromMessage(testMessage);
|
||||
assertTrue(result.contains("\"headers\":{"));
|
||||
assertTrue(result.contains("\"$timestamp\":"+testMessage.getHeaders().getTimestamp()));
|
||||
assertTrue(result.contains("\"$history\":[]"));
|
||||
assertTrue(result.contains("\"$id\":\""+testMessage.getHeaders().getId()+"\""));
|
||||
TestBean parsedPayload = extractJsonPayloadToTestBean(result);
|
||||
assertEquals(payload, parsedPayload);
|
||||
|
||||
Reference in New Issue
Block a user