INT-754. Moved parseInnerHandlerDefinitionMethod(..) to IntegrationNamespaceUtils as static method

This commit is contained in:
Oleg Zhurakousky
2009-08-18 04:05:08 +00:00
parent 0b588c5813
commit 4168b49e49
8 changed files with 33 additions and 33 deletions

View File

@@ -16,22 +16,15 @@
package org.springframework.integration.config.xml;
import java.util.List;
import org.w3c.dom.Element;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element;
/**
* Base class parser for elements that create Message Endpoints.
@@ -109,23 +102,4 @@ public abstract class AbstractConsumerEndpointParser extends AbstractBeanDefinit
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "auto-startup");
return builder.getBeanDefinition();
}
@SuppressWarnings("unchecked")
protected BeanDefinition parseInnerHandlerDefinition(Element element, ParserContext parserContext){
// parses out inner bean definition for concrete implementation if defined
List<Element> childElements = DomUtils.getChildElementsByTagName(element, "bean");
BeanDefinition innerDefinition = null;
if (childElements != null && childElements.size() == 1){
Element beanElement = childElements.get(0);
BeanDefinitionParserDelegate delegate = parserContext.getDelegate();
innerDefinition = delegate.parseBeanDefinitionElement(beanElement).getBeanDefinition();
}
String ref = element.getAttribute(REF_ATTRIBUTE);
Assert.isTrue(!(StringUtils.hasText(ref) && innerDefinition != null), "Ambiguous definition. Inner bean " +
(innerDefinition == null ? innerDefinition : innerDefinition.getBeanClassName()) + " declaration and \"ref\" " + ref +
" are not allowed together.");
return innerDefinition;
}
}

View File

@@ -61,7 +61,7 @@ public class AggregatorParser extends AbstractConsumerEndpointParser {
@Override
protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) {
BeanDefinition innerHandlerDefinition = this.parseInnerHandlerDefinition(element, parserContext);
BeanDefinition innerHandlerDefinition = IntegrationNamespaceUtils.parseInnerHandlerDefinition(element, parserContext);
String ref = element.getAttribute(REF_ATTRIBUTE);
BeanDefinitionBuilder builder;

View File

@@ -34,7 +34,7 @@ public class DefaultRouterParser extends AbstractRouterParser {
@Override
protected void parseRouter(Element element, BeanDefinitionBuilder builder, ParserContext parserContext) {
BeanDefinition innerDefinition = this.parseInnerHandlerDefinition(element, parserContext);
BeanDefinition innerDefinition = IntegrationNamespaceUtils.parseInnerHandlerDefinition(element, parserContext);
if (innerDefinition != null){
builder.addPropertyValue("targetObject", innerDefinition);
} else {

View File

@@ -45,7 +45,7 @@ public class FilterParser extends AbstractConsumerEndpointParser {
}
private String parseSelector(Element element, ParserContext parserContext) {
BeanDefinition innerHandlerDefinition = this.parseInnerHandlerDefinition(element, parserContext);
BeanDefinition innerHandlerDefinition = IntegrationNamespaceUtils.parseInnerHandlerDefinition(element, parserContext);
String ref = null;
if (innerHandlerDefinition == null){
ref = element.getAttribute("ref");

View File

@@ -16,15 +16,20 @@
package org.springframework.integration.config.xml;
import java.util.List;
import org.w3c.dom.Element;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.core.Conventions;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.util.xml.DomUtils;
/**
* Shared utility methods for integration namespace parsers.
@@ -36,6 +41,10 @@ import org.springframework.util.StringUtils;
public abstract class IntegrationNamespaceUtils {
static final String BASE_PACKAGE = "org.springframework.integration";
static final String REF_ATTRIBUTE = "ref";
static final String METHOD_ATTRIBUTE = "method";
static final String ORDER = "order";
/**
@@ -173,4 +182,21 @@ public abstract class IntegrationNamespaceUtils {
targetBuilder.addPropertyReference("pollerMetadata", pollerMetadataRef);
}
@SuppressWarnings("unchecked")
public static BeanDefinition parseInnerHandlerDefinition(Element element, ParserContext parserContext){
// parses out inner bean definition for concrete implementation if defined
List<Element> childElements = DomUtils.getChildElementsByTagName(element, "bean");
BeanDefinition innerDefinition = null;
if (childElements != null && childElements.size() == 1){
Element beanElement = childElements.get(0);
BeanDefinitionParserDelegate delegate = parserContext.getDelegate();
innerDefinition = delegate.parseBeanDefinitionElement(beanElement).getBeanDefinition();
}
String ref = element.getAttribute(REF_ATTRIBUTE);
Assert.isTrue(!(StringUtils.hasText(ref) && innerDefinition != null), "Ambiguous definition. Inner bean " +
(innerDefinition == null ? innerDefinition : innerDefinition.getBeanClassName()) + " declaration and \"ref\" " + ref +
" are not allowed together.");
return innerDefinition;
}
}

View File

@@ -33,7 +33,7 @@ public class ServiceActivatorParser extends AbstractConsumerEndpointParser {
@Override
protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) {
BeanDefinition innerHandlerDefinition = this.parseInnerHandlerDefinition(element, parserContext);
BeanDefinition innerHandlerDefinition = IntegrationNamespaceUtils.parseInnerHandlerDefinition(element, parserContext);
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(
IntegrationNamespaceUtils.BASE_PACKAGE + ".handler.ServiceActivatingHandler");

View File

@@ -33,7 +33,7 @@ public class SplitterParser extends AbstractConsumerEndpointParser {
@Override
protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) {
BeanDefinition innerDefinition = this.parseInnerHandlerDefinition(element, parserContext);
BeanDefinition innerDefinition = IntegrationNamespaceUtils.parseInnerHandlerDefinition(element, parserContext);
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(
IntegrationNamespaceUtils.BASE_PACKAGE + ".config.SplitterFactoryBean");
if (innerDefinition != null){

View File

@@ -32,7 +32,7 @@ public class TransformerParser extends AbstractConsumerEndpointParser {
@Override
protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) {
BeanDefinition innerDefinition = this.parseInnerHandlerDefinition(element, parserContext);
BeanDefinition innerDefinition = IntegrationNamespaceUtils.parseInnerHandlerDefinition(element, parserContext);
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(
IntegrationNamespaceUtils.BASE_PACKAGE + ".config.TransformerFactoryBean");