From 82677432cb38820ed2d1d83c19dfcd8ce0e2b447 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Fri, 10 Dec 2010 17:46:27 -0500 Subject: [PATCH] INT-1674 added support for 'source' on all top-level BeanDefinitions created by AbstractConsumerEndpointParser (transformer, filter, router, splitter, etc) --- .../xml/AbstractConsumerEndpointParser.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java index 0d9c63ecc6..fac79eaae9 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -22,6 +22,8 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.config.BeanDefinitionHolder; +import org.springframework.beans.factory.parsing.BeanComponentDefinition; +import org.springframework.beans.factory.parsing.CompositeComponentDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; @@ -80,8 +82,12 @@ public abstract class AbstractConsumerEndpointParser extends AbstractBeanDefinit } return handlerBeanDefinition; } + Object source = parserContext.extractSource(element); + CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(element.getTagName(), source); + parserContext.pushContainingComponent(compositeDef); BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( IntegrationNamespaceUtils.BASE_PACKAGE + ".config.ConsumerEndpointFactoryBean"); + builder.getRawBeanDefinition().setSource(source); String handlerBeanName = BeanDefinitionReaderUtils.registerWithGeneratedName(handlerBeanDefinition, parserContext.getRegistry()); builder.addPropertyReference("handler", handlerBeanName); String inputChannelName = element.getAttribute(inputChannelAttributeName); @@ -110,6 +116,11 @@ public abstract class AbstractConsumerEndpointParser extends AbstractBeanDefinit IntegrationNamespaceUtils.configurePollerMetadata(pollerElementList.get(0), builder, parserContext); } IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "auto-startup"); - return builder.getBeanDefinition(); + AbstractBeanDefinition beanDefinition = builder.getBeanDefinition(); + String beanName = this.resolveId(element, beanDefinition, parserContext); + parserContext.registerBeanComponent(new BeanComponentDefinition(beanDefinition, beanName)); + parserContext.popAndRegisterContainingComponent(); + return null; } + }