From ba2a713c75fe943d05d7b87a8ecae503bc7e8199 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Wed, 6 Apr 2016 17:32:19 -0400 Subject: [PATCH] INT-3981: Add a couple `` tests JIRA: https://jira.spring.io/browse/INT-3981 Since the `MessageHandlerChain` uses a `ReplyForwardingMessageChannel` in the end of invocation, we don't need to have add an extra `` for shifting just populated `replyChannel` header. * Add a couple tests to prove that * Fix the typos in the `ChainParserTests` * Remove unnecessary `DirectFieldAccessor` usage in the `MessageHandlerChain` --- .../handler/MessageHandlerChain.java | 3 +- .../config/ChainParserTests-context.xml | 14 ++++++++-- .../integration/config/ChainParserTests.java | 28 +++++++++++++++++-- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageHandlerChain.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageHandlerChain.java index 98736dd7cc..f08ebc2a8b 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageHandlerChain.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageHandlerChain.java @@ -20,7 +20,6 @@ import java.util.HashSet; import java.util.List; import java.util.concurrent.locks.ReentrantLock; -import org.springframework.beans.DirectFieldAccessor; import org.springframework.context.Lifecycle; import org.springframework.integration.core.MessageProducer; import org.springframework.integration.filter.MessageFilter; @@ -129,7 +128,7 @@ public class MessageHandlerChain extends AbstractMessageProducingHandler impleme // If this 'handler' is a nested non-last <chain>, it is necessary // to 'force' re-init it for check its configuration in conjunction with current MessageHandlerChain. if (handler instanceof MessageHandlerChain) { - new DirectFieldAccessor(handler).setPropertyValue("initialized", false); + ((MessageHandlerChain) handler).initialized = false; ((MessageHandlerChain) handler).afterPropertiesSet(); } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/ChainParserTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/config/ChainParserTests-context.xml index c079fdca07..7e20ad4a67 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/ChainParserTests-context.xml +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/ChainParserTests-context.xml @@ -153,8 +153,8 @@ - - + + @@ -191,4 +191,14 @@ + + + + + + + + + + diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/ChainParserTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/ChainParserTests.java index 2120f9d35f..fbc10f24fe 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/ChainParserTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/ChainParserTests.java @@ -50,6 +50,7 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.IntegrationMessageHeaderAccessor; import org.springframework.integration.MessageRejectedException; +import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.endpoint.AbstractEndpoint; import org.springframework.integration.gateway.GatewayProxyFactoryBean; import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; @@ -157,11 +158,17 @@ public class ChainParserTests { private PollableChannel numbers; @Autowired - private MessageChannel chainReplayRequiredChannel; + private MessageChannel chainReplyRequiredChannel; @Autowired private MessageChannel chainMessageRejectedExceptionChannel; + @Autowired + private MessageChannel chainWithNoOutputChannel; + + @Autowired + private MessageChannel chainWithTransformNoOutputChannel; + public static Message successMessage = MessageBuilder.withPayload("success").build(); @Factory @@ -419,12 +426,12 @@ public class ChainParserTests { public void testInt2755SubComponentException() { GenericMessage testMessage = new GenericMessage("test"); try { - this.chainReplayRequiredChannel.send(testMessage); + this.chainReplyRequiredChannel.send(testMessage); fail("Expected ReplyRequiredException"); } catch (Exception e) { assertTrue(e instanceof ReplyRequiredException); - assertTrue(e.getMessage().contains("'chainReplayRequired$child.transformerReplayRequired'")); + assertTrue(e.getMessage().contains("'chainReplyRequired$child.transformerReplyRequired'")); } try { @@ -438,6 +445,21 @@ public class ChainParserTests { } + @Test + public void testChainWithNoOutput() { + QueueChannel replyChannel = new QueueChannel(); + Message message = MessageBuilder.withPayload("foo").setHeader("myReplyChannel", replyChannel).build(); + this.chainWithNoOutputChannel.send(message); + Message receive = replyChannel.receive(10000); + assertNotNull(receive); + + message = MessageBuilder.withPayload("foo").setReplyChannel(replyChannel).build(); + Message message2 = MessageBuilder.withPayload("bar").setHeader("myMessage", message).build(); + this.chainWithTransformNoOutputChannel.send(message2); + receive = replyChannel.receive(10000); + assertNotNull(receive); + } + public static class StubHandler extends AbstractReplyProducingMessageHandler { @Override