Passing containing BeanDefinition when parsing an inner-bean.

This commit is contained in:
Mark Fisher
2009-01-29 13:31:34 +00:00
parent 0a652749c3
commit b735f84d3c
2 changed files with 18 additions and 15 deletions

View File

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

View File

@@ -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) {