From 1cbae6d3538b0112a6342750be94b20a186a4bf9 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Wed, 5 Jan 2011 13:40:20 -0500 Subject: [PATCH] INT-1735 changed the way ExpressionControlBusFactoryBean validates Lifecycle methods --- .../ExpressionControlBusFactoryBean.java | 7 +++-- .../xml/ControlBusLifecycleTests-context.xml | 24 ++++++++++++++ .../config/xml/ControlBusTests.java | 31 +++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 spring-integration-core/src/test/java/org/springframework/integration/config/xml/ControlBusLifecycleTests-context.xml diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/ExpressionControlBusFactoryBean.java b/spring-integration-core/src/main/java/org/springframework/integration/config/ExpressionControlBusFactoryBean.java index c0d41b224d..27c156aac4 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/ExpressionControlBusFactoryBean.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/ExpressionControlBusFactoryBean.java @@ -27,12 +27,14 @@ import org.springframework.integration.handler.ServiceActivatingHandler; import org.springframework.jmx.export.annotation.ManagedAttribute; import org.springframework.jmx.export.annotation.ManagedOperation; import org.springframework.util.CustomizableThreadCreator; +import org.springframework.util.ReflectionUtils; /** * FactoryBean for creating {@link MessageHandler} instances to handle a message as a SpEL expression. * * @author Dave Syer * @author Mark Fisher + * @author Oleg Zhurakousky * @since 2.0 */ public class ExpressionControlBusFactoryBean extends AbstractSimpleMessageHandlerFactoryBean { @@ -69,10 +71,11 @@ public class ExpressionControlBusFactoryBean extends AbstractSimpleMessageHandle return supportedMethods; } - private boolean accept(Method method) { - if (method.getDeclaringClass().equals(Lifecycle.class)) { + private boolean accept(Method method) { + if (ReflectionUtils.findMethod(Lifecycle.class, method.getName(), method.getParameterTypes()) != null){ return true; } + if (CustomizableThreadCreator.class.isAssignableFrom(method.getDeclaringClass()) && (method.getName().startsWith("get") || method.getName().startsWith("set") diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ControlBusLifecycleTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ControlBusLifecycleTests-context.xml new file mode 100644 index 0000000000..f024d10a0f --- /dev/null +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ControlBusLifecycleTests-context.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ControlBusTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ControlBusTests.java index 5fbacf7477..370dba88f5 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ControlBusTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ControlBusTests.java @@ -16,15 +16,22 @@ package org.springframework.integration.config.xml; +import static junit.framework.Assert.assertNotNull; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import java.util.Date; + import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.Message; import org.springframework.integration.MessageChannel; +import org.springframework.integration.core.MessageSource; import org.springframework.integration.core.PollableChannel; +import org.springframework.integration.message.GenericMessage; import org.springframework.integration.support.MessageBuilder; import org.springframework.jmx.export.annotation.ManagedOperation; import org.springframework.test.context.ContextConfiguration; @@ -51,6 +58,17 @@ public class ControlBusTests { assertEquals("catbar", output.receive(0).getPayload()); assertNull(output.receive(0)); } + + @Test + public void testLifecycleMethods() { + ApplicationContext context = new ClassPathXmlApplicationContext("ControlBusLifecycleTests-context.xml", this.getClass()); + MessageChannel inputChannel = context.getBean("inputChannel", MessageChannel.class); + PollableChannel outputChannel = context.getBean("outputChannel", PollableChannel.class); + assertNull(outputChannel.receive(1000)); + Message message = MessageBuilder.withPayload("@adapter.start()").build(); + inputChannel.send(message); + assertNotNull(outputChannel.receive(1000)); + } public static class Service { @@ -60,5 +78,18 @@ public class ControlBusTests { return "cat"; } } + + public static class AdapterService implements MessageSource{ + +// public String produceDate() { +// System.out.println("Producing Date"); +// return new Date().toString(); +// } + + public Message receive() { + System.out.println("Producing Date"); + return new GenericMessage(new Date().toString()); + } + } }