diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractPollingInboundChannelAdapterParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractPollingInboundChannelAdapterParser.java index 27a4b1ca30..e0ce939eea 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractPollingInboundChannelAdapterParser.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractPollingInboundChannelAdapterParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,10 +18,10 @@ package org.springframework.integration.config.xml; import org.w3c.dom.Element; +import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; /** @@ -33,13 +33,13 @@ public abstract class AbstractPollingInboundChannelAdapterParser extends Abstrac @Override protected AbstractBeanDefinition doParse(Element element, ParserContext parserContext, String channelName) { - String source = this.parseSource(element, parserContext); - if (!StringUtils.hasText(source)) { + BeanMetadataElement source = this.parseSource(element, parserContext); + if (source == null) { parserContext.getReaderContext().error("failed to parse source", element); } BeanDefinitionBuilder adapterBuilder = BeanDefinitionBuilder.genericBeanDefinition( IntegrationNamespaceUtils.BASE_PACKAGE + ".config.SourcePollingChannelAdapterFactoryBean"); - adapterBuilder.addPropertyReference("source", source); + adapterBuilder.addPropertyValue("source", source); adapterBuilder.addPropertyReference("outputChannel", channelName); Element pollerElement = DomUtils.getChildElementByTagName(element, "poller"); if (pollerElement != null) { @@ -53,6 +53,6 @@ public abstract class AbstractPollingInboundChannelAdapterParser extends Abstrac * Subclasses must implement this method to parse the PollableSource instance * which the created Channel Adapter will poll. */ - protected abstract String parseSource(Element element, ParserContext parserContext); + protected abstract BeanMetadataElement parseSource(Element element, ParserContext parserContext); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java index c3b04ad3bd..55db4371f9 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java @@ -191,8 +191,7 @@ public abstract class IntegrationNamespaceUtils { } public static BeanComponentDefinition parseInnerHandlerDefinition(Element element, ParserContext parserContext) { - // parses out inner bean definition for concrete implementation if - // defined + // parses out the inner bean definition for concrete implementation if defined List childElements = DomUtils.getChildElementsByTagName(element, "bean"); BeanComponentDefinition innerComponentDefinition = null; if (childElements != null && childElements.size() == 1) { @@ -202,15 +201,13 @@ public abstract class IntegrationNamespaceUtils { bdHolder = delegate.decorateBeanDefinitionIfRequired(beanElement, bdHolder); BeanDefinition inDef = bdHolder.getBeanDefinition(); innerComponentDefinition = new BeanComponentDefinition(inDef, bdHolder.getBeanName()); - parserContext.registerBeanComponent(innerComponentDefinition); } - String ref = element.getAttribute(REF_ATTRIBUTE); Assert.isTrue(!(StringUtils.hasText(ref) && innerComponentDefinition != null), - "Ambiguous definition. Inner bean " - + (innerComponentDefinition == null ? innerComponentDefinition : innerComponentDefinition - .getBeanDefinition().getBeanClassName()) + " declaration and \"ref\" " + ref - + " are not allowed together."); + "Ambiguous definition. Inner bean " + (innerComponentDefinition == null ? innerComponentDefinition + : innerComponentDefinition.getBeanDefinition().getBeanClassName()) + + " declaration and \"ref\" " + ref + " are not allowed together."); return innerComponentDefinition; } + } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/MethodInvokingInboundChannelAdapterParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/MethodInvokingInboundChannelAdapterParser.java index 35cb7b1d73..a1930ee0fd 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/MethodInvokingInboundChannelAdapterParser.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/MethodInvokingInboundChannelAdapterParser.java @@ -20,6 +20,8 @@ import java.util.List; import org.w3c.dom.Element; +import org.springframework.beans.BeanMetadataElement; +import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.parsing.BeanComponentDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; @@ -38,39 +40,57 @@ import org.springframework.util.xml.DomUtils; public class MethodInvokingInboundChannelAdapterParser extends AbstractPollingInboundChannelAdapterParser { @Override - protected String parseSource(Element element, ParserContext parserContext) { + protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { + BeanMetadataElement result = null; BeanComponentDefinition innnerBeanDef = IntegrationNamespaceUtils.parseInnerHandlerDefinition(element, parserContext); String sourceRef = element.getAttribute("ref"); + String methodName = element.getAttribute("method"); String expressionString = element.getAttribute("expression"); if (innnerBeanDef != null) { if (StringUtils.hasText(sourceRef)) { parserContext.getReaderContext().error( "inner bean and a 'ref' attribute are mutually exclusive options", element); } - sourceRef = innnerBeanDef.getBeanName(); + if (StringUtils.hasText(methodName)) { + result = this.parseMethodInvokingSource(innnerBeanDef, methodName, element, parserContext); + } + else { + result = innnerBeanDef; + } } else if (StringUtils.hasText(expressionString)) { if (StringUtils.hasText(sourceRef)) { parserContext.getReaderContext().error( "the 'expression' and 'ref' attributes are mutually exclusive options", element); } - sourceRef = this.parseExpression(expressionString, element, parserContext); + String expressionBeanName = this.parseExpression(expressionString, element, parserContext); + result = new RuntimeBeanReference(expressionBeanName); } - if (!StringUtils.hasText(sourceRef)) { + else if (StringUtils.hasText(sourceRef)) { + BeanMetadataElement sourceValue = new RuntimeBeanReference(sourceRef); + if (StringUtils.hasText(methodName)) { + result = this.parseMethodInvokingSource(sourceValue, methodName, element, parserContext); + } + else { + result = sourceValue; + } + } + else { parserContext.getReaderContext().error("One of the following is required: " + "'ref' attribute, 'expression' attribute, or an inner-bean definition.", element); } - String methodName = element.getAttribute("method"); - if (StringUtils.hasText(methodName)) { - BeanDefinitionBuilder sourceBuilder = BeanDefinitionBuilder.genericBeanDefinition( - IntegrationNamespaceUtils.BASE_PACKAGE + ".endpoint.MethodInvokingMessageSource"); - sourceBuilder.addPropertyReference("object", sourceRef); - sourceBuilder.addPropertyValue("methodName", methodName); - this.parseHeaderExpressions(sourceBuilder, element, parserContext); - sourceRef = BeanDefinitionReaderUtils.registerWithGeneratedName( - sourceBuilder.getBeanDefinition(), parserContext.getRegistry()); - } - return sourceRef; + return result; + } + + private BeanMetadataElement parseMethodInvokingSource(BeanMetadataElement targetObject, String methodName, Element element, ParserContext parserContext) { + BeanDefinitionBuilder sourceBuilder = BeanDefinitionBuilder.genericBeanDefinition( + IntegrationNamespaceUtils.BASE_PACKAGE + ".endpoint.MethodInvokingMessageSource"); + sourceBuilder.addPropertyValue("object", targetObject); + sourceBuilder.addPropertyValue("methodName", methodName); + this.parseHeaderExpressions(sourceBuilder, element, parserContext); + String sourceRef = BeanDefinitionReaderUtils.registerWithGeneratedName( + sourceBuilder.getBeanDefinition(), parserContext.getRegistry()); + return new RuntimeBeanReference(sourceRef); } private String parseExpression(String expressionString, Element element, ParserContext parserContext) { diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/InnerBeanConfigTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/InnerBeanConfigTests-context.xml new file mode 100644 index 0000000000..f31c2e51bf --- /dev/null +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/InnerBeanConfigTests-context.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/InnerBeanConfigTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/InnerBeanConfigTests.java new file mode 100644 index 0000000000..501d8a41c3 --- /dev/null +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/InnerBeanConfigTests.java @@ -0,0 +1,61 @@ +/* + * Copyright 2002-2010 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.config.xml; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.integration.endpoint.EventDrivenConsumer; +import org.springframework.integration.test.util.TestUtils; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * @author Mark Fisher + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +public class InnerBeanConfigTests { + + @Autowired + private EventDrivenConsumer testEndpoint; + + @Autowired + private ApplicationContext context; + + + // INT-1528: the inner bean should not be registered in the context + @Test(expected = NoSuchBeanDefinitionException.class) + public void checkInnerBean() { + Object innerBean = TestUtils.getPropertyValue(testEndpoint, "handler.processor.delegate.targetObject"); + assertNotNull(innerBean); + context.getBean(TestBean.class); + } + + + public static class TestBean { + public String echo(String value) { + return value; + } + } + +} diff --git a/spring-integration-feed/src/main/java/org/springframework/integration/feed/config/FeedInboundChannelAdapterParser.java b/spring-integration-feed/src/main/java/org/springframework/integration/feed/config/FeedInboundChannelAdapterParser.java index a6d120ac43..7e4b7c8ff2 100644 --- a/spring-integration-feed/src/main/java/org/springframework/integration/feed/config/FeedInboundChannelAdapterParser.java +++ b/spring-integration-feed/src/main/java/org/springframework/integration/feed/config/FeedInboundChannelAdapterParser.java @@ -18,8 +18,8 @@ package org.springframework.integration.feed.config; import org.w3c.dom.Element; +import org.springframework.beans.BeanMetadataElement; 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.xml.AbstractPollingInboundChannelAdapterParser; import org.springframework.integration.config.xml.IntegrationNamespaceUtils; @@ -36,7 +36,7 @@ import org.springframework.util.StringUtils; public class FeedInboundChannelAdapterParser extends AbstractPollingInboundChannelAdapterParser { @Override - protected String parseSource(final Element element, final ParserContext parserContext) { + protected BeanMetadataElement parseSource(final Element element, final ParserContext parserContext) { BeanDefinitionBuilder sourceBuilder = BeanDefinitionBuilder.genericBeanDefinition( "org.springframework.integration.feed.FeedEntryMessageSource"); sourceBuilder.addConstructorArgValue(element.getAttribute("url")); @@ -45,7 +45,7 @@ public class FeedInboundChannelAdapterParser extends AbstractPollingInboundChann sourceBuilder.addConstructorArgReference(feedFetcherRef); } IntegrationNamespaceUtils.setReferenceIfAttributeDefined(sourceBuilder, element, "metadata-store"); - return BeanDefinitionReaderUtils.registerWithGeneratedName(sourceBuilder.getBeanDefinition(), parserContext.getRegistry()); + return sourceBuilder.getBeanDefinition(); } } diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileInboundChannelAdapterParser.java b/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileInboundChannelAdapterParser.java index 1a2bae92fb..afef32cdc2 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileInboundChannelAdapterParser.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/config/FileInboundChannelAdapterParser.java @@ -16,7 +16,11 @@ package org.springframework.integration.file.config; +import org.w3c.dom.Element; + +import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.ParserContext; @@ -24,7 +28,6 @@ import org.springframework.integration.config.xml.AbstractPollingInboundChannelA import org.springframework.integration.config.xml.IntegrationNamespaceUtils; import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; -import org.w3c.dom.Element; /** * Parser for the <inbound-channel-adapter> element of the 'file' namespace. @@ -38,7 +41,7 @@ public class FileInboundChannelAdapterParser extends AbstractPollingInboundChann @Override - protected String parseSource(Element element, ParserContext parserContext) { + protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( PACKAGE_NAME + ".config.FileReadingMessageSourceFactoryBean"); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "comparator"); @@ -52,7 +55,8 @@ public class FileInboundChannelAdapterParser extends AbstractPollingInboundChann builder.addPropertyReference("locker", lockerBeanName); } builder.addPropertyReference("filter", filterBeanName); - return BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); + String beanName = BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); + return new RuntimeBeanReference(beanName); } private String registerLocker(Element element, ParserContext parserContext) { diff --git a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpMessageSourceBeanDefinitionParser.java b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpMessageSourceBeanDefinitionParser.java index f59524cc8b..e5800c5e7e 100644 --- a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpMessageSourceBeanDefinitionParser.java +++ b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpMessageSourceBeanDefinitionParser.java @@ -1,45 +1,42 @@ package org.springframework.integration.ftp.config; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import org.w3c.dom.Element; + +import org.springframework.beans.BeanMetadataElement; +import org.springframework.beans.factory.config.RuntimeBeanReference; 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.xml.AbstractPollingInboundChannelAdapterParser; import org.springframework.integration.config.xml.IntegrationNamespaceUtils; import org.springframework.integration.ftp.FtpRemoteFileSystemSynchronizingMessageSourceFactoryBean; -import org.w3c.dom.Element; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - /** - * Logic that configures an ftp:inbound-channel-adapter + * Parser for the FTP inbound-channel-adapter. * * @author Josh Long */ -public class FtpMessageSourceBeanDefinitionParser - extends AbstractPollingInboundChannelAdapterParser { +public class FtpMessageSourceBeanDefinitionParser extends AbstractPollingInboundChannelAdapterParser { + private Set receiveAttrs = new HashSet(Arrays.asList( - "auto-delete-remote-files-on-sync,filename-pattern,local-working-directory".split( - ","))); + "auto-delete-remote-files-on-sync,filename-pattern,local-working-directory".split(","))); @Override - @SuppressWarnings("unused") - protected String parseSource(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(FtpRemoteFileSystemSynchronizingMessageSourceFactoryBean.class.getName()); - - IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, - element, "filter"); - - for (String a : receiveAttrs) - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, - element, a); - - FtpNamespaceParserSupport.configureCoreFtpClient(builder, element, - parserContext); - - return BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), + protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + FtpRemoteFileSystemSynchronizingMessageSourceFactoryBean.class.getName()); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "filter"); + for (String a : receiveAttrs) { + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, a); + } + FtpNamespaceParserSupport.configureCoreFtpClient(builder, element, parserContext); + String beanName = BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); + return new RuntimeBeanReference(beanName); } + } diff --git a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpsMessageSourceBeanDefinitionParser.java b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpsMessageSourceBeanDefinitionParser.java index 4a790a44d9..0f5e299b32 100644 --- a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpsMessageSourceBeanDefinitionParser.java +++ b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/config/FtpsMessageSourceBeanDefinitionParser.java @@ -1,45 +1,38 @@ package org.springframework.integration.ftp.config; -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.xml.AbstractPollingInboundChannelAdapterParser; -import org.springframework.integration.config.xml.IntegrationNamespaceUtils; -import org.springframework.integration.ftp.FtpsRemoteFileSystemSynchronizingMessageSourceFactoryBean; -import org.w3c.dom.Element; - import java.util.Arrays; import java.util.HashSet; import java.util.Set; +import org.w3c.dom.Element; + +import org.springframework.beans.BeanMetadataElement; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.integration.config.xml.AbstractPollingInboundChannelAdapterParser; +import org.springframework.integration.config.xml.IntegrationNamespaceUtils; +import org.springframework.integration.ftp.FtpsRemoteFileSystemSynchronizingMessageSourceFactoryBean; /** - * Logic that configures an ftp:inbound-channel-adapter + * Parser for the FTPS inbound-channel-adapter * * @author Josh Long */ -public class FtpsMessageSourceBeanDefinitionParser - extends AbstractPollingInboundChannelAdapterParser { +public class FtpsMessageSourceBeanDefinitionParser extends AbstractPollingInboundChannelAdapterParser { + private Set receiveAttrs = new HashSet(Arrays.asList( - "auto-delete-remote-files-on-sync,filename-pattern,local-working-directory".split( - ","))); + "auto-delete-remote-files-on-sync,filename-pattern,local-working-directory".split(","))); @Override - @SuppressWarnings("unused") - protected String parseSource(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(FtpsRemoteFileSystemSynchronizingMessageSourceFactoryBean.class.getName()); - - IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, - element, "filter"); - - for (String a : receiveAttrs) - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, - element, a); - - FtpNamespaceParserSupport.configureCoreFtpClient(builder, element, - parserContext); - - return BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), - parserContext.getRegistry()); + protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( + FtpsRemoteFileSystemSynchronizingMessageSourceFactoryBean.class.getName()); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "filter"); + for (String a : receiveAttrs) { + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, a); + } + FtpNamespaceParserSupport.configureCoreFtpClient(builder, element, parserContext); + return builder.getBeanDefinition(); } + } diff --git a/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/config/JdbcPollingChannelAdapterParser.java b/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/config/JdbcPollingChannelAdapterParser.java index d774d87381..cfd9196f03 100644 --- a/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/config/JdbcPollingChannelAdapterParser.java +++ b/spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/config/JdbcPollingChannelAdapterParser.java @@ -16,14 +16,15 @@ package org.springframework.integration.jdbc.config; +import org.w3c.dom.Element; + +import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.factory.BeanCreationException; 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.xml.AbstractPollingInboundChannelAdapterParser; import org.springframework.integration.config.xml.IntegrationNamespaceUtils; import org.springframework.util.StringUtils; -import org.w3c.dom.Element; /** * Parser for {@link org.springframework.integration.jdbc.JdbcPollingChannelAdapter}. @@ -42,7 +43,7 @@ public class JdbcPollingChannelAdapterParser extends AbstractPollingInboundChann } @Override - protected String parseSource(Element element, ParserContext parserContext) { + protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { Object source = parserContext.extractSource(element); BeanDefinitionBuilder builder = BeanDefinitionBuilder .genericBeanDefinition("org.springframework.integration.jdbc.JdbcPollingChannelAdapter"); @@ -75,8 +76,7 @@ public class JdbcPollingChannelAdapterParser extends AbstractPollingInboundChann builder.addPropertyValue("updateSql", update); } IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "update-per-row"); - return BeanDefinitionReaderUtils.registerWithGeneratedName( - builder.getBeanDefinition(), parserContext.getRegistry()); + return builder.getBeanDefinition(); } } diff --git a/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsInboundChannelAdapterParser.java b/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsInboundChannelAdapterParser.java index 8c18d5129d..9c7157b896 100644 --- a/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsInboundChannelAdapterParser.java +++ b/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsInboundChannelAdapterParser.java @@ -18,6 +18,7 @@ package org.springframework.integration.jms.config; import org.w3c.dom.Element; +import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.parsing.BeanComponentDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; @@ -43,7 +44,7 @@ public class JmsInboundChannelAdapterParser extends AbstractPollingInboundChanne } @Override - protected String parseSource(Element element, ParserContext parserContext) { + protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( "org.springframework.integration.jms.JmsDestinationPollingSource"); String componentName = this.resolveId(element, builder.getBeanDefinition(), parserContext); @@ -88,9 +89,7 @@ public class JmsInboundChannelAdapterParser extends AbstractPollingInboundChanne IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "selector", "messageSelector"); BeanDefinition beanDefinition = builder.getBeanDefinition(); String beanName = BeanDefinitionReaderUtils.generateBeanName(beanDefinition, parserContext.getRegistry()); - BeanComponentDefinition component = new BeanComponentDefinition(beanDefinition, beanName); - parserContext.registerBeanComponent(component); - return beanName; + return new BeanComponentDefinition(beanDefinition, beanName); } } diff --git a/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/config/AttributePollingChannelAdapterParser.java b/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/config/AttributePollingChannelAdapterParser.java index c20050e5ce..81a17b9c3a 100644 --- a/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/config/AttributePollingChannelAdapterParser.java +++ b/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/config/AttributePollingChannelAdapterParser.java @@ -18,8 +18,8 @@ package org.springframework.integration.jmx.config; import org.w3c.dom.Element; +import org.springframework.beans.BeanMetadataElement; 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.xml.AbstractPollingInboundChannelAdapterParser; import org.springframework.integration.config.xml.IntegrationNamespaceUtils; @@ -36,14 +36,13 @@ public class AttributePollingChannelAdapterParser extends AbstractPollingInbound } @Override - protected String parseSource(Element element, ParserContext parserContext) { + protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition( "org.springframework.integration.jmx.AttributePollingMessageSource"); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "server", "server"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "object-name"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "attribute-name"); - return BeanDefinitionReaderUtils.registerWithGeneratedName( - builder.getBeanDefinition(), parserContext.getRegistry()); + return builder.getBeanDefinition(); } } diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java index 477422c445..d742a318fc 100644 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/config/MailInboundChannelAdapterParser.java @@ -18,9 +18,9 @@ package org.springframework.integration.mail.config; import org.w3c.dom.Element; +import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.factory.config.BeanDefinition; 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.xml.AbstractPollingInboundChannelAdapterParser; import org.springframework.integration.config.xml.IntegrationNamespaceUtils; @@ -28,8 +28,7 @@ import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; /** - * Parser for the <inbound-channel-adapter> element of Spring - * Integration's 'mail' namespace. + * Parser for the <inbound-channel-adapter> element of Spring Integration's 'mail' namespace. * * @author Jonas Partner * @author Mark Fisher @@ -41,12 +40,11 @@ public class MailInboundChannelAdapterParser extends AbstractPollingInboundChann @Override - protected String parseSource(Element element, ParserContext parserContext) { + protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( BASE_PACKAGE + ".MailReceivingMessageSource"); builder.addConstructorArgValue(this.parseMailReceiver(element, parserContext)); - return BeanDefinitionReaderUtils.registerWithGeneratedName( - builder.getBeanDefinition(), parserContext.getRegistry()); + return builder.getBeanDefinition(); } private BeanDefinition parseMailReceiver(Element element, ParserContext parserContext) { @@ -85,7 +83,6 @@ public class MailInboundChannelAdapterParser extends AbstractPollingInboundChann if (StringUtils.hasText(markAsRead)){ receiverBuilder.addPropertyValue("shouldMarkMessagesAsRead", markAsRead); } - return receiverBuilder.getBeanDefinition(); } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/config/SftpNamespaceHandler.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/config/SftpNamespaceHandler.java index 3ca6ac8558..e7d663a27b 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/config/SftpNamespaceHandler.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/config/SftpNamespaceHandler.java @@ -13,8 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.integration.sftp.config; +import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; @@ -25,7 +27,6 @@ import org.springframework.integration.config.xml.AbstractPollingInboundChannelA import org.springframework.integration.config.xml.IntegrationNamespaceUtils; import org.w3c.dom.Element; - /** * Provides namespace support for using SFTP. * This is very largely based on the FTP support by Iwein Fuld. @@ -47,11 +48,9 @@ public class SftpNamespaceHandler extends NamespaceHandlerSupport { @Override protected AbstractBeanDefinition parseConsumer(Element element, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(SftpMessageSendingConsumerFactoryBean.class.getName()); - for (String p : "auto-create-directories,username,password,host,port,key-file,key-file-password,remote-directory,charset".split(",")) { IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, p); } - return builder.getBeanDefinition(); } } @@ -61,18 +60,17 @@ public class SftpNamespaceHandler extends NamespaceHandlerSupport { * consumer */ private static class SFTPMessageSourceBeanDefinitionParser extends AbstractPollingInboundChannelAdapterParser { + @Override - protected String parseSource(Element element, ParserContext parserContext) { + protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( SftpRemoteFileSystemSynchronizingMessageSourceFactoryBean.class.getName()); - IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "filter"); - for (String p : "filename-pattern,auto-create-directories,username,password,host,key-file,key-file-password,remote-directory,local-directory-path,auto-delete-remote-files-on-sync".split(",")) { IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, p); } - - return BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); + return builder.getBeanDefinition(); } } + } diff --git a/spring-integration-stream/src/main/java/org/springframework/integration/stream/config/ConsoleInboundChannelAdapterParser.java b/spring-integration-stream/src/main/java/org/springframework/integration/stream/config/ConsoleInboundChannelAdapterParser.java index ef2e971b08..9267852982 100644 --- a/spring-integration-stream/src/main/java/org/springframework/integration/stream/config/ConsoleInboundChannelAdapterParser.java +++ b/spring-integration-stream/src/main/java/org/springframework/integration/stream/config/ConsoleInboundChannelAdapterParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,8 +18,8 @@ package org.springframework.integration.stream.config; import org.w3c.dom.Element; +import org.springframework.beans.BeanMetadataElement; 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.xml.AbstractPollingInboundChannelAdapterParser; import org.springframework.util.StringUtils; @@ -32,7 +32,7 @@ import org.springframework.util.StringUtils; public class ConsoleInboundChannelAdapterParser extends AbstractPollingInboundChannelAdapterParser { @Override - protected String parseSource(Element element, ParserContext parserContext) { + protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( "org.springframework.integration.stream.CharacterStreamReadingMessageSource"); builder.setFactoryMethod("stdin"); @@ -40,7 +40,7 @@ public class ConsoleInboundChannelAdapterParser extends AbstractPollingInboundCh if (StringUtils.hasText(charsetName)) { builder.addConstructorArgValue(charsetName); } - return BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); + return builder.getBeanDefinition(); } }