diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractChannelAdapterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractChannelAdapterParser.java index 733a760906..04c19e58a6 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractChannelAdapterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractChannelAdapterParser.java @@ -25,8 +25,6 @@ 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.ParserContext; -import org.springframework.integration.channel.DirectChannel; -import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -60,9 +58,12 @@ public abstract class AbstractChannelAdapterParser extends AbstractBeanDefinitio private String createDirectChannel(Element element, ParserContext parserContext) { String channelId = element.getAttribute("id"); - Assert.hasText(channelId, "The channel-adapter's 'id' attribute is required when no 'channel' " - + "reference has been provided, because that 'id' would be used for the created channel."); - BeanDefinitionBuilder channelBuilder = BeanDefinitionBuilder.genericBeanDefinition(DirectChannel.class); + if (!StringUtils.hasText(channelId)) { + parserContext.getReaderContext().error("The channel-adapter's 'id' attribute is required when no 'channel' " + + "reference has been provided, because that 'id' would be used for the created channel.", element); + } + BeanDefinitionBuilder channelBuilder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".channel.DirectChannel"); BeanDefinitionHolder holder = new BeanDefinitionHolder(channelBuilder.getBeanDefinition(), channelId); BeanDefinitionReaderUtils.registerBeanDefinition(holder, parserContext.getRegistry()); return channelId; diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractChannelParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractChannelParser.java index cdc5119d36..c8a609318f 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractChannelParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractChannelParser.java @@ -26,8 +26,6 @@ import org.springframework.beans.factory.support.ManagedList; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.channel.interceptor.MessageSelectingInterceptor; -import org.springframework.integration.selector.PayloadTypeSelector; import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; @@ -54,12 +52,14 @@ public abstract class AbstractChannelParser extends AbstractBeanDefinitionParser String datatypeAttr = element.getAttribute("datatype"); if (StringUtils.hasText(datatypeAttr)) { String[] datatypes = StringUtils.commaDelimitedListToStringArray(datatypeAttr); - RootBeanDefinition selectorDef = new RootBeanDefinition(PayloadTypeSelector.class); + RootBeanDefinition selectorDef = new RootBeanDefinition(); + selectorDef.setBeanClassName(IntegrationNamespaceUtils.BASE_PACKAGE + ".selector.PayloadTypeSelector"); selectorDef.getConstructorArgumentValues().addGenericArgumentValue(datatypes); String selectorBeanName = parserContext.getReaderContext().generateBeanName(selectorDef); BeanComponentDefinition selectorComponent = new BeanComponentDefinition(selectorDef, selectorBeanName); parserContext.registerBeanComponent(selectorComponent); - RootBeanDefinition interceptorDef = new RootBeanDefinition(MessageSelectingInterceptor.class); + RootBeanDefinition interceptorDef = new RootBeanDefinition(); + interceptorDef.setBeanClassName(IntegrationNamespaceUtils.BASE_PACKAGE + ".channel.interceptor.MessageSelectingInterceptor"); interceptorDef.getConstructorArgumentValues().addGenericArgumentValue(new RuntimeBeanReference(selectorBeanName)); String interceptorBeanName = parserContext.getReaderContext().generateBeanName(interceptorDef); BeanComponentDefinition interceptorComponent = new BeanComponentDefinition(interceptorDef, interceptorBeanName); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java index a99be5cf87..38de3d2b06 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java @@ -24,8 +24,6 @@ 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.ParserContext; -import org.springframework.integration.channel.DirectChannel; -import org.springframework.integration.config.ConsumerEndpointFactoryBean; import org.springframework.util.xml.DomUtils; /** @@ -72,12 +70,14 @@ public abstract class AbstractConsumerEndpointParser extends AbstractBeanDefinit } return handlerBeanDefinition; } - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(ConsumerEndpointFactoryBean.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".config.ConsumerEndpointFactoryBean"); String handlerBeanName = BeanDefinitionReaderUtils.registerWithGeneratedName(handlerBeanDefinition, parserContext.getRegistry()); builder.addConstructorArgReference(handlerBeanName); String inputChannelName = element.getAttribute(inputChannelAttributeName); if (!parserContext.getRegistry().containsBeanDefinition(inputChannelName)) { - BeanDefinitionBuilder channelDef = BeanDefinitionBuilder.genericBeanDefinition(DirectChannel.class); + BeanDefinitionBuilder channelDef = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".channel.DirectChannel"); BeanDefinitionHolder holder = new BeanDefinitionHolder(channelDef.getBeanDefinition(), inputChannelName); BeanDefinitionReaderUtils.registerBeanDefinition(holder, parserContext.getRegistry()); } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractOutboundChannelAdapterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractOutboundChannelAdapterParser.java index b5182bc29b..064751dc61 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractOutboundChannelAdapterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractOutboundChannelAdapterParser.java @@ -22,8 +22,7 @@ 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.ParserContext; -import org.springframework.integration.config.ConsumerEndpointFactoryBean; -import org.springframework.util.Assert; +import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; /** @@ -36,10 +35,14 @@ public abstract class AbstractOutboundChannelAdapterParser extends AbstractChann @Override protected AbstractBeanDefinition doParse(Element element, ParserContext parserContext, String channelName) { Element pollerElement = DomUtils.getChildElementByTagName(element, "poller"); - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(ConsumerEndpointFactoryBean.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".config.ConsumerEndpointFactoryBean"); builder.addConstructorArgReference(this.parseAndRegisterConsumer(element, parserContext)); if (pollerElement != null) { - Assert.hasText(channelName, "outbound channel adapter with a 'poller' requires a 'channel' to poll"); + if (!StringUtils.hasText(channelName)) { + parserContext.getReaderContext().error( + "outbound channel adapter with a 'poller' requires a 'channel' to poll", element); + } IntegrationNamespaceUtils.configurePollerMetadata(pollerElement, builder, parserContext); } builder.addPropertyValue("inputChannelName", channelName); @@ -53,7 +56,10 @@ public abstract class AbstractOutboundChannelAdapterParser extends AbstractChann */ protected String parseAndRegisterConsumer(Element element, ParserContext parserContext) { AbstractBeanDefinition definition = this.parseConsumer(element, parserContext); - Assert.notNull(definition, "Consumer parsing must return a BeanDefinition."); + if (definition == null) { + parserContext.getReaderContext().error( + "Consumer parsing must return a BeanDefinition.", element); + } return BeanDefinitionReaderUtils.registerWithGeneratedName( definition, parserContext.getRegistry()); } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractPollingInboundChannelAdapterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractPollingInboundChannelAdapterParser.java index dea2cf4d8f..27a4b1ca30 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractPollingInboundChannelAdapterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractPollingInboundChannelAdapterParser.java @@ -21,8 +21,7 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.config.SourcePollingChannelAdapterFactoryBean; -import org.springframework.util.Assert; +import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; /** @@ -35,8 +34,11 @@ public abstract class AbstractPollingInboundChannelAdapterParser extends Abstrac @Override protected AbstractBeanDefinition doParse(Element element, ParserContext parserContext, String channelName) { String source = this.parseSource(element, parserContext); - Assert.hasText(source, "failed to parse source"); - BeanDefinitionBuilder adapterBuilder = BeanDefinitionBuilder.genericBeanDefinition(SourcePollingChannelAdapterFactoryBean.class); + if (!StringUtils.hasText(source)) { + parserContext.getReaderContext().error("failed to parse source", element); + } + BeanDefinitionBuilder adapterBuilder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".config.SourcePollingChannelAdapterFactoryBean"); adapterBuilder.addPropertyReference("source", source); adapterBuilder.addPropertyReference("outputChannel", channelName); Element pollerElement = DomUtils.getChildElementByTagName(element, "poller"); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AggregatorParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AggregatorParser.java index c128b03130..b643dfc9e4 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AggregatorParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AggregatorParser.java @@ -21,9 +21,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.aggregator.CompletionStrategyAdapter; -import org.springframework.integration.aggregator.MethodInvokingAggregator; -import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -56,9 +53,12 @@ public class AggregatorParser extends AbstractConsumerEndpointParser { @Override protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MethodInvokingAggregator.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".aggregator.MethodInvokingAggregator"); String ref = element.getAttribute(REF_ATTRIBUTE); - Assert.hasText(ref, "The '" + REF_ATTRIBUTE + "' attribute is required."); + if (!StringUtils.hasText(ref)) { + parserContext.getReaderContext().error("The '" + REF_ATTRIBUTE + "' attribute is required.", element); + } builder.addConstructorArgReference(ref); if (StringUtils.hasText(element.getAttribute(METHOD_ATTRIBUTE))) { String method = element.getAttribute(METHOD_ATTRIBUTE); @@ -87,7 +87,8 @@ public class AggregatorParser extends AbstractConsumerEndpointParser { } private String createCompletionStrategyAdapter(String ref, String method, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(CompletionStrategyAdapter.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".aggregator.CompletionStrategyAdapter"); builder.addConstructorArgReference(ref); builder.addConstructorArgValue(method); return BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AnnotationConfigParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AnnotationConfigParser.java index 47a0835cba..a1532818be 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AnnotationConfigParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AnnotationConfigParser.java @@ -24,25 +24,28 @@ import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.config.annotation.MessagingAnnotationPostProcessor; /** * Parser for the <annotation-config> element of the integration namespace. - * Adds a {@link MessagingAnnotationPostProcessor} to the application context. + * Adds a {@link org.springframework.integration.config.annotation.MessagingAnnotationPostProcessor} + * to the application context. * * @author Mark Fisher */ public class AnnotationConfigParser extends AbstractSingleBeanDefinitionParser { + private final static String PACKAGE_NAME = IntegrationNamespaceUtils.BASE_PACKAGE + ".config.annotation"; + + @Override - protected Class getBeanClass(Element element) { - return MessagingAnnotationPostProcessor.class; + protected String getBeanClassName(Element element) { + return PACKAGE_NAME + ".MessagingAnnotationPostProcessor"; } @Override protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) throws BeanDefinitionStoreException { - return "internal." + MessagingAnnotationPostProcessor.class.getName(); + return PACKAGE_NAME + ".internalMessagingAnnotationPostProcessor"; } @Override diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ApplicationEventMulticasterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ApplicationEventMulticasterParser.java index db1927a324..02335872d9 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ApplicationEventMulticasterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ApplicationEventMulticasterParser.java @@ -25,7 +25,6 @@ import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.context.event.SimpleApplicationEventMulticaster; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.core.task.TaskExecutor; import org.springframework.integration.context.IntegrationContextUtils; @@ -40,8 +39,8 @@ import org.springframework.util.StringUtils; public class ApplicationEventMulticasterParser extends AbstractSingleBeanDefinitionParser { @Override - protected Class getBeanClass(Element element) { - return SimpleApplicationEventMulticaster.class; + protected String getBeanClassName(Element element) { + return "org.springframework.context.event.SimpleApplicationEventMulticaster"; } @Override diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/BridgeParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/BridgeParser.java index 95557f29d0..ad2a01d0c4 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/BridgeParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/BridgeParser.java @@ -20,7 +20,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.handler.BridgeHandler; /** * Parser for the <bridge> element. @@ -31,7 +30,8 @@ public class BridgeParser extends AbstractConsumerEndpointParser { @Override protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) { - return BeanDefinitionBuilder.genericBeanDefinition(BridgeHandler.class); + return BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".handler.BridgeHandler"); } } 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 5e824da92b..43a0f8dd17 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 @@ -21,14 +21,12 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.config.RuntimeBeanReference; -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.support.ManagedList; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.handler.MessageHandlerChain; -import org.springframework.util.Assert; /** * Parser for the <chain> element. @@ -40,7 +38,8 @@ public class ChainParser extends AbstractConsumerEndpointParser { @Override @SuppressWarnings("unchecked") protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MessageHandlerChain.class); + 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++) { @@ -56,10 +55,13 @@ public class ChainParser extends AbstractConsumerEndpointParser { private String parseChild(Element element, ParserContext parserContext, BeanDefinition parentDefinition) { BeanDefinition beanDefinition = parserContext.getDelegate().parseCustomElement(element, parentDefinition); - Assert.notNull(beanDefinition, "BeanDefinition must not be null"); - Assert.isInstanceOf(AbstractBeanDefinition.class, beanDefinition); - return BeanDefinitionReaderUtils.registerWithGeneratedName( - (AbstractBeanDefinition) beanDefinition, parserContext.getRegistry()); + if (beanDefinition == null) { + parserContext.getReaderContext().error("child BeanDefinition must not be null", element); + } + String beanName = BeanDefinitionReaderUtils.generateBeanName(beanDefinition, parserContext.getRegistry()); + BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition, beanName); + BeanDefinitionReaderUtils.registerBeanDefinition(holder, parserContext.getRegistry()); + return beanName; } } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/FilterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/FilterParser.java index 138ecd37ec..1bb906fe6d 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/FilterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/FilterParser.java @@ -21,9 +21,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.filter.MessageFilter; -import org.springframework.integration.filter.MethodInvokingSelector; -import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -35,7 +32,8 @@ public class FilterParser extends AbstractConsumerEndpointParser { @Override protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MessageFilter.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".filter.MessageFilter"); builder.addConstructorArgReference(this.parseSelector(element, parserContext)); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "throw-exception-on-rejection"); return builder; @@ -43,12 +41,15 @@ public class FilterParser extends AbstractConsumerEndpointParser { private String parseSelector(Element element, ParserContext parserContext) { String ref = element.getAttribute("ref"); - Assert.hasText(ref, "The 'ref' attribute is required."); + if (!StringUtils.hasText(ref)) { + parserContext.getReaderContext().error("The 'ref' attribute is required.", element); + } String method = element.getAttribute("method"); if (!StringUtils.hasText(method)) { return ref; } - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MethodInvokingSelector.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".filter.MethodInvokingSelector"); builder.addConstructorArgReference(ref); builder.addConstructorArgValue(method); return BeanDefinitionReaderUtils.registerWithGeneratedName( diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/GatewayParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/GatewayParser.java index 6d7f3b98c7..65edbd451b 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/GatewayParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/GatewayParser.java @@ -20,7 +20,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser; -import org.springframework.integration.gateway.GatewayProxyFactoryBean; import org.springframework.util.ObjectUtils; /** @@ -36,8 +35,8 @@ public class GatewayParser extends AbstractSimpleBeanDefinitionParser { @Override - protected Class getBeanClass(Element element) { - return GatewayProxyFactoryBean.class; + protected String getBeanClassName(Element element) { + return IntegrationNamespaceUtils.BASE_PACKAGE + ".gateway.GatewayProxyFactoryBean"; } @Override diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/MethodInvokingInboundChannelAdapterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/MethodInvokingInboundChannelAdapterParser.java index 6e761daccd..4b9789f642 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/MethodInvokingInboundChannelAdapterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/MethodInvokingInboundChannelAdapterParser.java @@ -21,8 +21,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.message.MethodInvokingMessageSource; -import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -35,10 +33,13 @@ public class MethodInvokingInboundChannelAdapterParser extends AbstractPollingIn @Override protected String parseSource(Element element, ParserContext parserContext) { String sourceRef = element.getAttribute("ref"); - Assert.hasText(sourceRef, "The 'ref' attribute is required."); + if (!StringUtils.hasText(sourceRef)) { + parserContext.getReaderContext().error("The 'ref' attribute is required.", element); + } String methodName = element.getAttribute("method"); if (StringUtils.hasText(methodName)) { - BeanDefinitionBuilder invokerBuilder = BeanDefinitionBuilder.genericBeanDefinition(MethodInvokingMessageSource.class); + BeanDefinitionBuilder invokerBuilder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".message.MethodInvokingMessageSource"); invokerBuilder.addPropertyReference("object", sourceRef); invokerBuilder.addPropertyValue("methodName", methodName); sourceRef = BeanDefinitionReaderUtils.registerWithGeneratedName( diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/MethodInvokingOutboundChannelAdapterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/MethodInvokingOutboundChannelAdapterParser.java index 4c3c745278..29809e7909 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/MethodInvokingOutboundChannelAdapterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/MethodInvokingOutboundChannelAdapterParser.java @@ -22,8 +22,6 @@ 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.ParserContext; -import org.springframework.integration.handler.MethodInvokingMessageHandler; -import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -36,7 +34,9 @@ public class MethodInvokingOutboundChannelAdapterParser extends AbstractOutbound @Override protected String parseAndRegisterConsumer(Element element, ParserContext parserContext) { String consumerRef = element.getAttribute("ref"); - Assert.isTrue(StringUtils.hasText(consumerRef), "The 'ref' attribute is required."); + if (!StringUtils.hasText(consumerRef)) { + parserContext.getReaderContext().error("The 'ref' attribute is required.", element); + } if (element.hasAttribute("method")) { consumerRef = BeanDefinitionReaderUtils.registerWithGeneratedName( this.parseConsumer(element, parserContext), parserContext.getRegistry()); @@ -46,7 +46,8 @@ public class MethodInvokingOutboundChannelAdapterParser extends AbstractOutbound @Override protected AbstractBeanDefinition parseConsumer(Element element, ParserContext parserContext) { - BeanDefinitionBuilder invokerBuilder = BeanDefinitionBuilder.genericBeanDefinition(MethodInvokingMessageHandler.class); + BeanDefinitionBuilder invokerBuilder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".handler.MethodInvokingMessageHandler"); invokerBuilder.addConstructorArgReference(element.getAttribute("ref")); invokerBuilder.addConstructorArgValue(element.getAttribute("method")); return invokerBuilder.getBeanDefinition(); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PointToPointChannelParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PointToPointChannelParser.java index 29164598d2..bb67d88329 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PointToPointChannelParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PointToPointChannelParser.java @@ -20,10 +20,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.channel.DirectChannel; -import org.springframework.integration.channel.PriorityChannel; -import org.springframework.integration.channel.QueueChannel; -import org.springframework.integration.channel.RendezvousChannel; import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; @@ -34,7 +30,7 @@ import org.springframework.util.xml.DomUtils; */ public class PointToPointChannelParser extends AbstractChannelParser { - private static final String CAPACITY_ATTRIBUTE = "capacity"; + private static final String CHANNEL_PACKAGE = IntegrationNamespaceUtils.BASE_PACKAGE + ".channel"; @Override @@ -42,11 +38,11 @@ public class PointToPointChannelParser extends AbstractChannelParser { BeanDefinitionBuilder builder = null; Element queueElement = null; if ((queueElement = DomUtils.getChildElementByTagName(element, "queue")) != null) { - builder = BeanDefinitionBuilder.genericBeanDefinition(QueueChannel.class); + builder = BeanDefinitionBuilder.genericBeanDefinition(CHANNEL_PACKAGE + ".QueueChannel"); this.parseQueueCapacity(builder, queueElement); } else if ((queueElement = DomUtils.getChildElementByTagName(element, "priority-queue")) != null) { - builder = BeanDefinitionBuilder.genericBeanDefinition(PriorityChannel.class); + builder = BeanDefinitionBuilder.genericBeanDefinition(CHANNEL_PACKAGE + ".PriorityChannel"); this.parseQueueCapacity(builder, queueElement); String comparatorRef = queueElement.getAttribute("comparator"); if (StringUtils.hasText(comparatorRef)) { @@ -54,16 +50,16 @@ public class PointToPointChannelParser extends AbstractChannelParser { } } else if ((queueElement = DomUtils.getChildElementByTagName(element, "rendezvous-queue")) != null) { - builder = BeanDefinitionBuilder.genericBeanDefinition(RendezvousChannel.class); + builder = BeanDefinitionBuilder.genericBeanDefinition(CHANNEL_PACKAGE + ".RendezvousChannel"); } else { - builder = BeanDefinitionBuilder.genericBeanDefinition(DirectChannel.class); + builder = BeanDefinitionBuilder.genericBeanDefinition(CHANNEL_PACKAGE + ".DirectChannel"); } return builder; } private void parseQueueCapacity(BeanDefinitionBuilder builder, Element queueElement) { - String capacity = queueElement.getAttribute(CAPACITY_ATTRIBUTE); + String capacity = queueElement.getAttribute("capacity"); if (StringUtils.hasText(capacity)) { builder.addConstructorArgValue(Integer.valueOf(capacity)); } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PollerParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PollerParser.java index 97f8ff09b2..ac18c44252 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PollerParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PollerParser.java @@ -27,11 +27,8 @@ import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.context.IntegrationContextUtils; -import org.springframework.integration.scheduling.CronTrigger; -import org.springframework.integration.scheduling.IntervalTrigger; -import org.springframework.integration.scheduling.PollerMetadata; import org.springframework.transaction.support.DefaultTransactionDefinition; -import org.springframework.util.Assert; +import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; /** @@ -45,8 +42,9 @@ public class PollerParser extends AbstractBeanDefinitionParser { protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) throws BeanDefinitionStoreException { String id = super.resolveId(element, definition, parserContext); if (element.getAttribute("default").equals("true")) { - Assert.isTrue(!parserContext.getRegistry().isBeanNameInUse(IntegrationContextUtils.DEFAULT_POLLER_METADATA_BEAN_NAME), - "only one default element is allowed per context"); + if (parserContext.getRegistry().isBeanNameInUse(IntegrationContextUtils.DEFAULT_POLLER_METADATA_BEAN_NAME)) { + parserContext.getReaderContext().error("only one default element is allowed per context", element); + } parserContext.getRegistry().registerAlias(id, IntegrationContextUtils.DEFAULT_POLLER_METADATA_BEAN_NAME); } return id; @@ -54,9 +52,12 @@ public class PollerParser extends AbstractBeanDefinitionParser { @Override protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { - BeanDefinitionBuilder metadataBuilder = BeanDefinitionBuilder.genericBeanDefinition(PollerMetadata.class); - Assert.isTrue(!element.hasAttribute("ref"), - "the 'ref' attribute must not be present on a 'poller' element submitted to the parser"); + BeanDefinitionBuilder metadataBuilder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".scheduling.PollerMetadata"); + if (element.hasAttribute("ref")) { + parserContext.getReaderContext().error( + "the 'ref' attribute must not be present on a 'poller' element submitted to the parser", element); + } configureTrigger(element, metadataBuilder, parserContext); IntegrationNamespaceUtils.setValueIfAttributeDefined(metadataBuilder, element, "max-messages-per-poll"); Element txElement = DomUtils.getChildElementByTagName(element, "transactional"); @@ -75,8 +76,10 @@ public class PollerParser extends AbstractBeanDefinitionParser { } else { Element cronElement = DomUtils.getChildElementByTagName(pollerElement, "cron-trigger"); - Assert.notNull(cronElement, - "A element must include either an or child element."); + if (cronElement == null) { + parserContext.getReaderContext().error( + "A element must include either an or child element.", pollerElement); + } triggerBeanName = parseCronTrigger(cronElement, parserContext); } targetBuilder.addPropertyReference("trigger", triggerBeanName); @@ -87,9 +90,12 @@ public class PollerParser extends AbstractBeanDefinitionParser { */ private String parseIntervalTrigger(Element element, ParserContext parserContext) { String interval = element.getAttribute("interval"); - Assert.hasText(interval, "the 'interval' attribute is required for an "); + if (!StringUtils.hasText(interval)) { + parserContext.getReaderContext().error("the 'interval' attribute is required for an ", element); + } TimeUnit timeUnit = TimeUnit.valueOf(element.getAttribute("time-unit")); - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(IntervalTrigger.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".scheduling.IntervalTrigger"); builder.addConstructorArgValue(interval); builder.addConstructorArgValue(timeUnit); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "initial-delay"); @@ -102,8 +108,11 @@ public class PollerParser extends AbstractBeanDefinitionParser { */ private String parseCronTrigger(Element element, ParserContext parserContext) { String cronExpression = element.getAttribute("expression"); - Assert.hasText(cronExpression, "the 'expression' attribute is required for a "); - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(CronTrigger.class); + if (!StringUtils.hasText(cronExpression)) { + parserContext.getReaderContext().error("the 'expression' attribute is required for a ", element); + } + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".scheduling.CronTrigger"); builder.addConstructorArgValue(cronExpression); return BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PublishSubscribeChannelParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PublishSubscribeChannelParser.java index fbeb364469..f2a18be536 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PublishSubscribeChannelParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/PublishSubscribeChannelParser.java @@ -20,7 +20,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.channel.PublishSubscribeChannel; import org.springframework.util.StringUtils; /** @@ -32,7 +31,8 @@ public class PublishSubscribeChannelParser extends AbstractChannelParser { @Override protected BeanDefinitionBuilder buildBeanDefinition(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(PublishSubscribeChannel.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".channel.PublishSubscribeChannel"); String taskExecutorRef = element.getAttribute("task-executor"); if (StringUtils.hasText(taskExecutorRef)) { builder.addConstructorArgReference(taskExecutorRef); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ResequencerParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ResequencerParser.java index 16de484f20..32cb2c41d8 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ResequencerParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ResequencerParser.java @@ -20,7 +20,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.aggregator.Resequencer; /** * Parser for the <resequencer> element. @@ -29,31 +28,17 @@ import org.springframework.integration.aggregator.Resequencer; */ public class ResequencerParser extends AbstractConsumerEndpointParser { - private static final String DISCARD_CHANNEL_ATTRIBUTE = "discard-channel"; - - private static final String SEND_TIMEOUT_ATTRIBUTE = "send-timeout"; - - private static final String RELEASE_PARTIAL_SEQUENCES = "release-partial-sequences"; - - private static final String SEND_PARTIAL_RESULT_ON_TIMEOUT_ATTRIBUTE = "send-partial-result-on-timeout"; - - private static final String REAPER_INTERVAL_ATTRIBUTE = "reaper-interval"; - - private static final String TRACKED_CORRELATION_ID_CAPACITY_ATTRIBUTE = "tracked-correlation-id-capacity"; - - private static final String TIMEOUT_ATTRIBUTE = "timeout"; - - @Override protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(Resequencer.class); - IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, DISCARD_CHANNEL_ATTRIBUTE); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, SEND_TIMEOUT_ATTRIBUTE); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, RELEASE_PARTIAL_SEQUENCES); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, SEND_PARTIAL_RESULT_ON_TIMEOUT_ATTRIBUTE); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, REAPER_INTERVAL_ATTRIBUTE); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, TRACKED_CORRELATION_ID_CAPACITY_ATTRIBUTE); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, TIMEOUT_ATTRIBUTE); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".aggregator.Resequencer"); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "discard-channel"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "send-timeout"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "release-partial-sequences"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "send-partial-result-on-timeout"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "reaper-interval"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "tracked-correlation-id-capacity"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "timeout"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "auto-startup"); return builder; } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/RouterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/RouterParser.java index 06eaf98c99..1b234f2768 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/RouterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/RouterParser.java @@ -21,9 +21,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.channel.BeanFactoryChannelResolver; -import org.springframework.integration.config.RouterFactoryBean; -import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -36,14 +33,18 @@ public class RouterParser extends AbstractConsumerEndpointParser { @Override protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) { String ref = element.getAttribute(REF_ATTRIBUTE); - Assert.hasText(ref, "The '" + REF_ATTRIBUTE + "' attribute is required."); - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(RouterFactoryBean.class); + if (!StringUtils.hasText(ref)) { + parserContext.getReaderContext().error("The '" + REF_ATTRIBUTE + "' attribute is required.", element); + } + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".config.RouterFactoryBean"); builder.addPropertyReference("targetObject", ref); if (StringUtils.hasText(element.getAttribute(METHOD_ATTRIBUTE))) { String method = element.getAttribute(METHOD_ATTRIBUTE); builder.addPropertyValue("targetMethodName", method); } - BeanDefinitionBuilder resolverBuilder = BeanDefinitionBuilder.genericBeanDefinition(BeanFactoryChannelResolver.class); + BeanDefinitionBuilder resolverBuilder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".channel.BeanFactoryChannelResolver"); String resolverBeanName = BeanDefinitionReaderUtils.registerWithGeneratedName( resolverBuilder.getBeanDefinition(), parserContext.getRegistry()); builder.addPropertyReference("channelResolver", resolverBeanName); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SelectorChainParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SelectorChainParser.java index 0d46c70399..d49bda075b 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SelectorChainParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SelectorChainParser.java @@ -26,8 +26,7 @@ import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.ManagedList; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.selector.MessageSelectorChain; -import org.springframework.util.Assert; +import org.springframework.util.StringUtils; /** * Parser for the <selector-chain/> element. @@ -36,13 +35,18 @@ import org.springframework.util.Assert; */ public class SelectorChainParser extends AbstractSingleBeanDefinitionParser { + private static final String SELECTOR_CHAIN_CLASSNAME = IntegrationNamespaceUtils.BASE_PACKAGE + ".selector.MessageSelectorChain"; + + @Override - protected Class getBeanClass(Element element) { - return MessageSelectorChain.class; + protected String getBeanClassName(Element element) { + return SELECTOR_CHAIN_CLASSNAME; } public void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { - Assert.hasText(element.getAttribute("id"), "id is required"); + if (!StringUtils.hasText(element.getAttribute("id"))) { + parserContext.getReaderContext().error("id is required", element); + } this.parseSelectorChain(builder, element, parserContext); } @@ -61,7 +65,7 @@ public class SelectorChainParser extends AbstractSingleBeanDefinitionParser { } else if ("selector-chain".equals(nodeName)) { BeanDefinitionBuilder nestedBuilder = - BeanDefinitionBuilder.genericBeanDefinition(MessageSelectorChain.class); + BeanDefinitionBuilder.genericBeanDefinition(SELECTOR_CHAIN_CLASSNAME); this.parseSelectorChain(nestedBuilder, (Element) child, parserContext); String nestedBeanName = BeanDefinitionReaderUtils.registerWithGeneratedName( nestedBuilder.getBeanDefinition(), parserContext.getRegistry()); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ServiceActivatorParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ServiceActivatorParser.java index ff21605663..b00b738804 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ServiceActivatorParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ServiceActivatorParser.java @@ -20,8 +20,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.handler.ServiceActivatingHandler; -import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -33,9 +31,12 @@ public class ServiceActivatorParser extends AbstractConsumerEndpointParser { @Override protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(ServiceActivatingHandler.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".handler.ServiceActivatingHandler"); String ref = element.getAttribute(REF_ATTRIBUTE); - Assert.hasText(ref, "The '" + REF_ATTRIBUTE + "' attribute is required."); + if (!StringUtils.hasText(ref)) { + parserContext.getReaderContext().error("The '" + REF_ATTRIBUTE + "' attribute is required.", element); + } builder.addConstructorArgReference(ref); if (StringUtils.hasText(element.getAttribute(METHOD_ATTRIBUTE))) { String method = element.getAttribute(METHOD_ATTRIBUTE); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SimpleHeaderEnricherParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SimpleHeaderEnricherParser.java index b90f830fa8..c8d469f87d 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SimpleHeaderEnricherParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SimpleHeaderEnricherParser.java @@ -93,7 +93,7 @@ public class SimpleHeaderEnricherParser extends AbstractTransformerParser { headers.put(name, value); } } - this.postProcessHeaders(element, headers); + this.postProcessHeaders(element, headers, parserContext); builder.addConstructorArgValue(headers); builder.addPropertyValue("overwrite", this.shouldOverwrite(element)); } @@ -101,7 +101,7 @@ public class SimpleHeaderEnricherParser extends AbstractTransformerParser { /** * Subclasses may implement this method to provide additional headers. */ - protected void postProcessHeaders(Element element, ManagedMap headers) { + protected void postProcessHeaders(Element element, ManagedMap headers, ParserContext parserContext) { } } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SplitterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SplitterParser.java index 2850d183ca..e545260727 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SplitterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/SplitterParser.java @@ -20,7 +20,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.config.SplitterFactoryBean; import org.springframework.util.StringUtils; /** @@ -32,7 +31,8 @@ public class SplitterParser extends AbstractConsumerEndpointParser { @Override protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(SplitterFactoryBean.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".config.SplitterFactoryBean"); if (element.hasAttribute(REF_ATTRIBUTE)) { String ref = element.getAttribute(REF_ATTRIBUTE); builder.addPropertyReference("targetObject", ref); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/StandardHeaderEnricherParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/StandardHeaderEnricherParser.java index 62d42b4266..cee4ba0c00 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/StandardHeaderEnricherParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/StandardHeaderEnricherParser.java @@ -22,8 +22,8 @@ import org.w3c.dom.NodeList; import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.support.ManagedMap; +import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.core.MessageHeaders; -import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -49,7 +49,7 @@ public class StandardHeaderEnricherParser extends SimpleHeaderEnricherParser { @Override @SuppressWarnings("unchecked") - protected void postProcessHeaders(Element element, ManagedMap headers) { + protected void postProcessHeaders(Element element, ManagedMap headers, ParserContext parserContext) { NodeList childNodes = element.getChildNodes(); for (int i = 0; i < childNodes.getLength(); i++) { Node node = childNodes.item(i); @@ -60,7 +60,10 @@ public class StandardHeaderEnricherParser extends SimpleHeaderEnricherParser { String ref = headerElement.getAttribute("ref"); boolean isValue = StringUtils.hasText(value); boolean isRef = StringUtils.hasText(ref); - Assert.isTrue(isValue ^ isRef, "Exactly one of the 'value' or 'ref' attributes is required."); + if (!(isValue ^ isRef)) { + parserContext.getReaderContext().error( + "Exactly one of the 'value' or 'ref' attributes is required.", element); + } if (isValue) { headers.put(name, value); } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ThreadLocalChannelParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ThreadLocalChannelParser.java index d2544902ef..6ea55a3c48 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ThreadLocalChannelParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ThreadLocalChannelParser.java @@ -20,7 +20,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.channel.ThreadLocalChannel; /** * Parser for the <thread-local-channel> element. @@ -31,7 +30,8 @@ public class ThreadLocalChannelParser extends AbstractChannelParser { @Override protected BeanDefinitionBuilder buildBeanDefinition(Element element, ParserContext parserContext) { - return BeanDefinitionBuilder.genericBeanDefinition(ThreadLocalChannel.class); + return BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".channel.ThreadLocalChannel"); } } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ThreadPoolTaskExecutorParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ThreadPoolTaskExecutorParser.java index 43839c4a73..8786e4185e 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ThreadPoolTaskExecutorParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/ThreadPoolTaskExecutorParser.java @@ -23,10 +23,11 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.util.StringUtils; /** + * Parser for the 'thread-pool-task-executor' element. + * * @author Mark Fisher */ public class ThreadPoolTaskExecutorParser extends AbstractSimpleBeanDefinitionParser { @@ -39,8 +40,8 @@ public class ThreadPoolTaskExecutorParser extends AbstractSimpleBeanDefinitionPa @Override - protected Class getBeanClass(Element element) { - return ThreadPoolTaskExecutor.class; + protected String getBeanClassName(Element element) { + return "org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"; } @Override diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/TransformerParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/TransformerParser.java index 7db2b39576..fe557bfdce 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/TransformerParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/TransformerParser.java @@ -21,9 +21,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.transformer.MessageTransformingHandler; -import org.springframework.integration.transformer.MethodInvokingTransformer; -import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -33,21 +30,28 @@ import org.springframework.util.StringUtils; */ public class TransformerParser extends AbstractConsumerEndpointParser { + private final static String TRANSFORMER_PACKAGE = IntegrationNamespaceUtils.BASE_PACKAGE + ".transformer"; + + @Override protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MessageTransformingHandler.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + TRANSFORMER_PACKAGE + ".MessageTransformingHandler"); builder.addConstructorArgReference(this.parseTransformer(element, parserContext)); return builder; } private String parseTransformer(Element element, ParserContext parserContext) { String ref = element.getAttribute("ref"); - Assert.hasText(ref, "The 'ref' attribute is required."); + if (!StringUtils.hasText(ref)) { + parserContext.getReaderContext().error("The 'ref' attribute is required.", element); + } String method = element.getAttribute("method"); if (!StringUtils.hasText(method)) { return ref; } - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MethodInvokingTransformer.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + TRANSFORMER_PACKAGE + ".MethodInvokingTransformer"); builder.addConstructorArgReference(ref); builder.addConstructorArgValue(method); return BeanDefinitionReaderUtils.registerWithGeneratedName( diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/WireTapParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/WireTapParser.java index 775c1ad102..8f121705e5 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/WireTapParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/WireTapParser.java @@ -21,8 +21,6 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.channel.interceptor.WireTap; -import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** @@ -33,9 +31,12 @@ import org.springframework.util.StringUtils; public class WireTapParser implements BeanDefinitionRegisteringParser { public String parse(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(WireTap.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".channel.interceptor.WireTap"); String targetRef = element.getAttribute("channel"); - Assert.hasText(targetRef, "the 'channel' attribute is required"); + if (!StringUtils.hasText(targetRef)) { + parserContext.getReaderContext().error("The 'channel' attribute is required.", element); + } builder.addConstructorArgReference(targetRef); String selectorRef = element.getAttribute("selector"); if (StringUtils.hasText(selectorRef)) {