diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/AbstractSimpleMessageHandlerFactoryBean.java b/spring-integration-core/src/main/java/org/springframework/integration/config/AbstractSimpleMessageHandlerFactoryBean.java index 014813ce1e..922b565869 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/AbstractSimpleMessageHandlerFactoryBean.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/AbstractSimpleMessageHandlerFactoryBean.java @@ -19,6 +19,7 @@ import org.aopalliance.aop.Advice; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.aop.framework.Advised; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; @@ -29,6 +30,7 @@ import org.springframework.integration.context.IntegrationObjectSupport; import org.springframework.integration.context.Orderable; import org.springframework.integration.core.MessageProducer; import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; +import org.springframework.integration.support.context.NamedComponent; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHandler; import org.springframework.util.Assert; @@ -118,17 +120,24 @@ public abstract class AbstractSimpleMessageHandlerFactoryBean("foo")); + Message reply = output.receive(0); + assertEquals("FOO", reply.getPayload()); + assertEquals(1, adviceCalled); + + input = context.getBean("direct", MessageChannel.class); + input.send(new GenericMessage("foo")); + reply = output.receive(0); + assertEquals("FOO", reply.getPayload()); + + input = context.getBean("directRef", MessageChannel.class); + input.send(new GenericMessage("foo")); + reply = output.receive(0); + assertEquals("FOO", reply.getPayload()); + assertEquals(2, adviceCalled); + + input = context.getBean("service", MessageChannel.class); + input.send(new GenericMessage("foo")); + assertEquals(1, bazCalled); + assertEquals(3, adviceCalled); + + context.close(); + } + + public static class FooAdvice extends AbstractRequestHandlerAdvice { + + @Override + protected Object doInvoke(ExecutionCallback callback, Object target, Message message) throws Exception { + adviceCalled++; + return callback.execute(); + } + + } + + public static class Bar extends AbstractReplyProducingMessageHandler { + + @Override + protected Object handleRequestMessage(Message requestMessage) { + Exception e = new RuntimeException(); + StackTraceElement[] st = e.getStackTrace(); + return MessageBuilder.withPayload(requestMessage.getPayload().toString().toUpperCase()) + .setHeader("callStack", st); + } + + } + + public static class BazService { + + public void qux() { + bazCalled++; + } + + public String upperCase(String input) { + return input.toUpperCase(); + } + + } + +} diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/transformerContextTests.xml b/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/transformerContextTests.xml new file mode 100644 index 0000000000..0498f75b3a --- /dev/null +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/transformerContextTests.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +