diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractEndpoint.java b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractEndpoint.java index 2b2895e812..682a2d6ceb 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractEndpoint.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractEndpoint.java @@ -229,7 +229,7 @@ public abstract class AbstractEndpoint implements MessageEndpoint, ChannelRegist Message reply = this.handleMessage(message); for (int i = index - 1; i >= 0; i--) { EndpointInterceptor interceptor = this.interceptors.get(i); - reply = interceptor.postHandle(message, reply); + reply = interceptor.postHandle(reply); } if (reply != null) { this.getMessageExchangeTemplate().send(message, this.target); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/EndpointInterceptor.java b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/EndpointInterceptor.java index 027f2026a3..ac949d7ad8 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/EndpointInterceptor.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/EndpointInterceptor.java @@ -26,8 +26,8 @@ public interface EndpointInterceptor { Message preHandle(Message requestMessage); - Message aroundHandle(Message message, MessageHandler handler); + Message aroundHandle(Message requestMessage, MessageHandler handler); - Message postHandle(Message requestMessage, Message replyMessage); + Message postHandle(Message replyMessage); } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/SimpleEndpoint.java b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/SimpleEndpoint.java index a2832ed717..610e189c84 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/SimpleEndpoint.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/SimpleEndpoint.java @@ -231,7 +231,7 @@ public class SimpleEndpoint implements MessageEndpoint Message replyMessage = this.handler.handle(requestMessage); for (int i = index - 1; i >= 0; i--) { EndpointInterceptor interceptor = this.interceptors.get(i); - replyMessage = interceptor.postHandle(requestMessage, replyMessage); + replyMessage = interceptor.postHandle(replyMessage); } return replyMessage; } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/interceptor/EndpointInterceptorAdapter.java b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/interceptor/EndpointInterceptorAdapter.java index 67ade9d92c..d34a5bc939 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/interceptor/EndpointInterceptorAdapter.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/interceptor/EndpointInterceptorAdapter.java @@ -31,11 +31,11 @@ public class EndpointInterceptorAdapter implements EndpointInterceptor { return requestMessage; } - public Message aroundHandle(Message message, MessageHandler handler) { - return handler.handle(message); + public Message aroundHandle(Message requestMessage, MessageHandler handler) { + return handler.handle(requestMessage); } - public Message postHandle(Message requestMessage, Message replyMessage) { + public Message postHandle(Message replyMessage) { return replyMessage; } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/handler/InterceptingMessageHandler.java b/org.springframework.integration/src/main/java/org/springframework/integration/handler/MessageHandlerDecorator.java similarity index 57% rename from org.springframework.integration/src/main/java/org/springframework/integration/handler/InterceptingMessageHandler.java rename to org.springframework.integration/src/main/java/org/springframework/integration/handler/MessageHandlerDecorator.java index 2676e54f81..049e02b2a1 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/handler/InterceptingMessageHandler.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/handler/MessageHandlerDecorator.java @@ -17,6 +17,7 @@ package org.springframework.integration.handler; import org.springframework.integration.message.Message; +import org.springframework.integration.message.MessageHandlingException; import org.springframework.util.Assert; /** @@ -24,18 +25,31 @@ import org.springframework.util.Assert; * * @author Mark Fisher */ -public abstract class InterceptingMessageHandler implements MessageHandler { +public abstract class MessageHandlerDecorator implements MessageHandler { - private MessageHandler target; + private MessageHandler handler; - public InterceptingMessageHandler(MessageHandler target) { - Assert.notNull(target, "target must not be null"); - this.target = target; + public MessageHandlerDecorator(MessageHandler handler) { + Assert.notNull(handler, "handler must not be null"); + this.handler = handler; + } + + public MessageHandlerDecorator() { + } + + + public void setHandler(MessageHandler handler) { + Assert.notNull(handler, "handler must not be null"); + this.handler = handler; } public final Message handle(Message message) { - return handle(message, this.target); + if (this.handler == null) { + throw new MessageHandlingException(message, + "MessageHandlerDecorator's handler must not be null"); + } + return this.handleInternal(message, this.handler); } @@ -43,9 +57,9 @@ public abstract class InterceptingMessageHandler implements MessageHandler { * The handler method for subclasses to implement. * * @param message the message to handle - * @param target the intercepted handler + * @param handler the intercepted handler * @return a reply message or null */ - public abstract Message handle(Message message, MessageHandler target); + public abstract Message handleInternal(Message message, MessageHandler handler); } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/EndpointInterceptorTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/EndpointInterceptorTests.java index cf332145ea..fec4f3a1a0 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/EndpointInterceptorTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/EndpointInterceptorTests.java @@ -52,23 +52,23 @@ public class EndpointInterceptorTests { @SuppressWarnings("unchecked") private static void testInterceptors(MessageEndpoint endpoint, ClassPathXmlApplicationContext context, boolean innerBeans) { - TestPreSendInterceptor preInterceptor = null; - TestAroundSendEndpointInterceptor aroundInterceptor = null; + TestPreHandleInterceptor preInterceptor = null; + TestPostHandleInterceptor postInterceptor = null; if (innerBeans) { DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint); List interceptors = (List) accessor.getPropertyValue("interceptors"); - preInterceptor = (TestPreSendInterceptor) interceptors.get(0); - aroundInterceptor = (TestAroundSendEndpointInterceptor) interceptors.get(1); + preInterceptor = (TestPreHandleInterceptor) interceptors.get(0); + postInterceptor = (TestPostHandleInterceptor) interceptors.get(1); } else { - preInterceptor = (TestPreSendInterceptor) context.getBean("preInterceptor"); - aroundInterceptor = (TestAroundSendEndpointInterceptor) context.getBean("aroundInterceptor"); + preInterceptor = (TestPreHandleInterceptor) context.getBean("preInterceptor"); + postInterceptor = (TestPostHandleInterceptor) context.getBean("postInterceptor"); } assertEquals(0, preInterceptor.getCount()); - assertEquals(0, aroundInterceptor.getCount()); + assertEquals(0, postInterceptor.getCount()); endpoint.send(new StringMessage("test")); assertEquals(1, preInterceptor.getCount()); - assertEquals(2, aroundInterceptor.getCount()); + assertEquals(1, postInterceptor.getCount()); context.stop(); } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/TestAroundSendEndpointInterceptor.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/TestPostHandleInterceptor.java similarity index 76% rename from org.springframework.integration/src/test/java/org/springframework/integration/config/TestAroundSendEndpointInterceptor.java rename to org.springframework.integration/src/test/java/org/springframework/integration/config/TestPostHandleInterceptor.java index ac8d355a7e..7e75bf8ea9 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/TestAroundSendEndpointInterceptor.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/TestPostHandleInterceptor.java @@ -19,13 +19,12 @@ package org.springframework.integration.config; import java.util.concurrent.atomic.AtomicInteger; import org.springframework.integration.endpoint.interceptor.EndpointInterceptorAdapter; -import org.springframework.integration.handler.MessageHandler; import org.springframework.integration.message.Message; /** * @author Mark Fisher */ -public class TestAroundSendEndpointInterceptor extends EndpointInterceptorAdapter { +public class TestPostHandleInterceptor extends EndpointInterceptorAdapter { private AtomicInteger counter = new AtomicInteger(); @@ -35,11 +34,9 @@ public class TestAroundSendEndpointInterceptor extends EndpointInterceptorAdapte } @Override - public Message aroundHandle(Message message, MessageHandler handler) { + public Message postHandle(Message replyMessage) { this.counter.incrementAndGet(); - Message reply = handler.handle(message); - this.counter.incrementAndGet(); - return reply; + return replyMessage; } } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/TestPreSendInterceptor.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/TestPreHandleInterceptor.java similarity index 93% rename from org.springframework.integration/src/test/java/org/springframework/integration/config/TestPreSendInterceptor.java rename to org.springframework.integration/src/test/java/org/springframework/integration/config/TestPreHandleInterceptor.java index 60e6873a91..9f5916ac72 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/TestPreSendInterceptor.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/TestPreHandleInterceptor.java @@ -24,7 +24,7 @@ import org.springframework.integration.message.Message; /** * @author Mark Fisher */ -public class TestPreSendInterceptor extends EndpointInterceptorAdapter { +public class TestPreHandleInterceptor extends EndpointInterceptorAdapter { private AtomicInteger counter = new AtomicInteger(); diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/endpointInterceptorTests.xml b/org.springframework.integration/src/test/java/org/springframework/integration/config/endpointInterceptorTests.xml index 0b867c3086..2e996c81fe 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/endpointInterceptorTests.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/endpointInterceptorTests.xml @@ -19,8 +19,8 @@ output-channel="replyChannel"> - - + + @@ -31,15 +31,15 @@ - + - + - + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/handler/MessageHandlerChainTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/handler/MessageHandlerChainTests.java index 82b8820fc2..03a08c0089 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/handler/MessageHandlerChainTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/handler/MessageHandlerChainTests.java @@ -40,11 +40,11 @@ public class MessageHandlerChainTests { } @Test - public void testChainWithInterceptors() { + public void testChainWithDecorators() { MessageHandler handler1 = new TestHandler("*"); - MessageHandler handler2 = new TestInterceptingHandler("2", handler1); - MessageHandler handler3 = new TestInterceptingHandler("3", handler2); - MessageHandler handler4 = new TestInterceptingHandler("4", handler3); + MessageHandler handler2 = new TestHandlerDecorator("2", handler1); + MessageHandler handler3 = new TestHandlerDecorator("3", handler2); + MessageHandler handler4 = new TestHandlerDecorator("4", handler3); MessageHandlerChain chain = new MessageHandlerChain(); chain.add(new TestHandler("a")); chain.add(handler4); @@ -68,17 +68,18 @@ public class MessageHandlerChainTests { } - private static class TestInterceptingHandler extends InterceptingMessageHandler { + private static class TestHandlerDecorator extends MessageHandlerDecorator { private String text; - TestInterceptingHandler(String text, MessageHandler target) { - super(target); + TestHandlerDecorator(String text, MessageHandler handler) { + super(handler); this.text = text; } - public Message handle(Message message, MessageHandler target) { - message = target.handle(new StringMessage(text + message.getPayload())); + @Override + public Message handleInternal(Message message, MessageHandler handler) { + message = handler.handle(new StringMessage(text + message.getPayload())); return new StringMessage(message.getPayload() + text); } }