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 {