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());
+ }
+ }
}