diff --git a/spring-integration-groovy/src/main/java/org/springframework/integration/groovy/config/GroovyControlBusFactoryBean.java b/spring-integration-groovy/src/main/java/org/springframework/integration/groovy/config/GroovyControlBusFactoryBean.java
index 7cd6c31637..9f06c8634f 100644
--- a/spring-integration-groovy/src/main/java/org/springframework/integration/groovy/config/GroovyControlBusFactoryBean.java
+++ b/spring-integration-groovy/src/main/java/org/springframework/integration/groovy/config/GroovyControlBusFactoryBean.java
@@ -20,7 +20,7 @@ import groovy.lang.Binding;
import groovy.lang.MissingPropertyException;
import org.springframework.beans.factory.BeanCreationNotAllowedException;
import org.springframework.beans.factory.BeanFactory;
-import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.Lifecycle;
import org.springframework.core.annotation.AnnotationUtils;
@@ -86,7 +86,7 @@ public class GroovyControlBusFactoryBean extends AbstractSimpleMessageHandlerFac
* in the original Groovy script {@link Binding}.
* In additionally beans should be 'managed' with specific properties which
* are allowed in the Control Bus operations.
- */
+ */
private static class ManagedBeansBinding extends Binding {
private final ConfigurableListableBeanFactory beanFactory;
@@ -108,14 +108,19 @@ public class GroovyControlBusFactoryBean extends AbstractSimpleMessageHandlerFac
if (this.beanFactory == null) {
throw new MissingPropertyException(name, this.getClass());
}
- BeanDefinition def = this.beanFactory.getBeanDefinition(name);
- if (!def.isAbstract() && !def.isPrototype()) {
- Object bean = this.beanFactory.getBean(name);
- if (bean instanceof Lifecycle ||
- bean instanceof CustomizableThreadCreator ||
- (AnnotationUtils.findAnnotation(bean.getClass(), ManagedResource.class) != null)) {
- return bean;
- }
+
+ Object bean = null;
+ try {
+ bean = this.beanFactory.getBean(name);
+ }
+ catch (NoSuchBeanDefinitionException e) {
+ throw new MissingPropertyException(name, this.getClass(), e);
+ }
+
+ if (bean instanceof Lifecycle ||
+ bean instanceof CustomizableThreadCreator ||
+ (AnnotationUtils.findAnnotation(bean.getClass(), ManagedResource.class) != null)) {
+ return bean;
}
throw new BeanCreationNotAllowedException(name, "Only beans with @ManagedResource or beans which implement " +
"org.springframework.context.Lifecycle or org.springframework.util.CustomizableThreadCreator " +
diff --git a/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/GroovyControlBusDelayerManagementTest.groovy b/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/GroovyControlBusDelayerManagementTest.groovy
index c685902dab..95d44e5978 100644
--- a/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/GroovyControlBusDelayerManagementTest.groovy
+++ b/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/GroovyControlBusDelayerManagementTest.groovy
@@ -1,9 +1,8 @@
-import org.springframework.integration.test.util.TestUtils
-import org.springframework.integration.handler.DelayHandler
-
-def delayHandler = TestUtils.getPropertyValue(testDelayer, 'handler', DelayHandler)
-
+def delayHandler = this.'testDelayer.handler'
def delayedMessageCount = delayHandler.delayedMessageCount
+
+println delayedMessageCount
+
assert 2 == delayedMessageCount
delayHandler.reschedulePersistedMessages()
diff --git a/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/GroovyControlBusIntegrationTests.java b/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/GroovyControlBusIntegrationTests.java
index 15c2e2a00f..cb1b6b466a 100644
--- a/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/GroovyControlBusIntegrationTests.java
+++ b/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/GroovyControlBusIntegrationTests.java
@@ -13,7 +13,6 @@
package org.springframework.integration.groovy;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
diff --git a/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyControlBusTests-context.xml b/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyControlBusTests-context.xml
index 8dd231009b..cc92b14d75 100644
--- a/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyControlBusTests-context.xml
+++ b/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyControlBusTests-context.xml
@@ -35,6 +35,12 @@
+
+
+
+
diff --git a/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyControlBusTests.java b/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyControlBusTests.java
index e894a14958..dc197d238d 100644
--- a/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyControlBusTests.java
+++ b/spring-integration-groovy/src/test/java/org/springframework/integration/groovy/config/GroovyControlBusTests.java
@@ -21,12 +21,16 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
+import java.util.HashMap;
+import java.util.Map;
+
import groovy.lang.GroovyObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.BeanCreationNotAllowedException;
+import org.springframework.beans.factory.BeanIsAbstractException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
@@ -41,8 +45,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
-import java.util.HashMap;
-import java.util.Map;
/**
* @author Dave Syer
@@ -115,6 +117,27 @@ public class GroovyControlBusTests {
}
}
+ @Test //INT-2631
+ public void testFailOperationOnAbstractBean() {
+ try {
+ Message> message = MessageBuilder.withPayload("abstractService.convert('testString')").build();
+ this.input.send(message);
+ fail("Expected BeanIsAbstractException");
+ }
+ catch (MessageHandlingException e) {
+ Throwable cause = e.getCause();
+ assertTrue("Expected BeanIsAbstractException, got " + cause.getClass() + ":" + cause.getMessage(), cause instanceof BeanIsAbstractException);
+ assertTrue(cause.getMessage().contains("abstractService"));
+ }
+ }
+
+ @Test //INT-2631
+ public void testOperationOnPrototypeBean() {
+ Message> message = MessageBuilder.withPayload("def result = prototypeService.convert('testString')").build();
+ this.input.send(message);
+ assertEquals("cat", output.receive(0).getPayload());
+ }
+
@ManagedResource
public static class Service {