OPEN - issue INT-555: chain allows bean as a subelement, but parser cannot handle this.

http://jira.springframework.org/browse/INT-555

added condition to parser to parse bean elements too (with test).
This commit is contained in:
Iwein Fuld
2009-01-29 11:58:13 +00:00
parent 62e744457d
commit 0a652749c3
3 changed files with 74 additions and 29 deletions

View File

@@ -27,19 +27,21 @@ 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.
*
* @author Mark Fisher
* @author Iwein Fuld
*/
public class ChainParser extends AbstractConsumerEndpointParser {
@Override
@SuppressWarnings("unchecked")
protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(
IntegrationNamespaceUtils.BASE_PACKAGE + ".handler.MessageHandlerChain");
BeanDefinitionBuilder builder = BeanDefinitionBuilder
.genericBeanDefinition(IntegrationNamespaceUtils.BASE_PACKAGE + ".handler.MessageHandlerChain");
ManagedList handlerList = new ManagedList();
NodeList children = element.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
@@ -54,7 +56,13 @@ public class ChainParser extends AbstractConsumerEndpointParser {
}
private String parseChild(Element element, ParserContext parserContext, BeanDefinition parentDefinition) {
BeanDefinition beanDefinition = parserContext.getDelegate().parseCustomElement(element, parentDefinition);
BeanDefinition beanDefinition;
if (element.getLocalName().equals("bean")) {
beanDefinition = parserContext.getDelegate().parseBeanDefinitionElement(element).getBeanDefinition();
}
else {
beanDefinition = parserContext.getDelegate().parseCustomElement(element, parentDefinition);
}
if (beanDefinition == null) {
parserContext.getReaderContext().error("child BeanDefinition must not be null", element);
}