Passing containing BeanDefinition when parsing an inner-bean.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user