diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ChainParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ChainParser.java index 2fe05c16fa..e18aa5c8c4 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ChainParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ChainParser.java @@ -27,7 +27,6 @@ import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.ManagedList; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; /** * Parser for the <chain> element. @@ -56,20 +55,25 @@ public class ChainParser extends AbstractConsumerEndpointParser { } private String parseChild(Element element, ParserContext parserContext, BeanDefinition parentDefinition) { - BeanDefinition beanDefinition; + BeanDefinitionHolder holder = null; if (element.getLocalName().equals("bean")) { - beanDefinition = parserContext.getDelegate().parseBeanDefinitionElement(element).getBeanDefinition(); + holder = parserContext.getDelegate().parseBeanDefinitionElement(element, parentDefinition); } else { - beanDefinition = parserContext.getDelegate().parseCustomElement(element, parentDefinition); + BeanDefinition beanDefinition = parserContext.getDelegate().parseCustomElement(element, parentDefinition); + if (beanDefinition == null) { + parserContext.getReaderContext().error("child BeanDefinition must not be null", element); + } + else { + String beanName = BeanDefinitionReaderUtils.generateBeanName(beanDefinition, parserContext.getRegistry()); + holder = new BeanDefinitionHolder(beanDefinition, beanName); + } } - if (beanDefinition == null) { - parserContext.getReaderContext().error("child BeanDefinition must not be null", element); + if (holder == null) { + return null; } - String beanName = BeanDefinitionReaderUtils.generateBeanName(beanDefinition, parserContext.getRegistry()); - BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition, beanName); BeanDefinitionReaderUtils.registerBeanDefinition(holder, parserContext.getRegistry()); - return beanName; + return holder.getBeanName(); } } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/ChainParserTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/ChainParserTests.java index d01b7a2343..a10a34a678 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/ChainParserTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/ChainParserTests.java @@ -33,9 +33,7 @@ import org.springframework.integration.core.MessageChannel; import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; import org.springframework.integration.handler.ReplyMessageHolder; import org.springframework.integration.message.MessageBuilder; -import org.springframework.integration.message.MessageHandler; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** @@ -66,12 +64,11 @@ public class ChainParserTests { @Qualifier("replyOutput") private PollableChannel replyOutput; - @Autowired @Qualifier("beanInput") private MessageChannel beanInput; - public static Message successMessage = MessageBuilder.withPayload("success").build(); + public static Message successMessage = MessageBuilder.withPayload("success").build(); @Test @@ -113,14 +110,16 @@ public class ChainParserTests { } @Test + @SuppressWarnings("unchecked") public void chainHandlerBean() throws Exception { Message message = MessageBuilder.withPayload("test").build(); this.beanInput.send(message); - Message reply = this.output.receive(3000); + Message reply = this.output.receive(3000); assertNotNull(reply); assertThat(reply, is(successMessage)); } - + + public static class StubHandler extends AbstractReplyProducingMessageHandler { @Override protected void handleRequestMessage(Message requestMessage, ReplyMessageHolder replyMessageHolder) {