diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GlobalChannelInterceptorParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GlobalChannelInterceptorParser.java index 63bf1c74b5..4e75124829 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GlobalChannelInterceptorParser.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GlobalChannelInterceptorParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -27,6 +27,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.AbstractBeanDefinitionParser; +import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.channel.interceptor.GlobalChannelInterceptorWrapper; import org.springframework.util.xml.DomUtils; @@ -59,19 +60,24 @@ public class GlobalChannelInterceptorParser extends AbstractBeanDefinitionParser @Override protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { - BeanDefinitionBuilder globalChannelInterceptorBuilder = BeanDefinitionBuilder.genericBeanDefinition(GlobalChannelInterceptorWrapper.class); + BeanDefinitionBuilder globalChannelInterceptorBuilder = + BeanDefinitionBuilder.genericBeanDefinition(GlobalChannelInterceptorWrapper.class); Object childBeanDefinition = getBeanDefinitionBuilderConstructorValue(element, parserContext); globalChannelInterceptorBuilder.addConstructorArgValue(childBeanDefinition); IntegrationNamespaceUtils.setValueIfAttributeDefined(globalChannelInterceptorBuilder, element, "order"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(globalChannelInterceptorBuilder, element, CHANNEL_NAME_PATTERN_ATTRIBUTE, "patterns"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(globalChannelInterceptorBuilder, element, + CHANNEL_NAME_PATTERN_ATTRIBUTE, "patterns"); return globalChannelInterceptorBuilder.getBeanDefinition(); } protected Object getBeanDefinitionBuilderConstructorValue(Element element, ParserContext parserContext) { - BeanComponentDefinition interceptorBeanDefinition = IntegrationNamespaceUtils.parseInnerHandlerDefinition(element, parserContext); + BeanComponentDefinition interceptorBeanDefinition = + IntegrationNamespaceUtils.parseInnerHandlerDefinition(element, parserContext); if (interceptorBeanDefinition != null) { return interceptorBeanDefinition; } + + BeanDefinitionParserDelegate delegate = parserContext.getDelegate(); String beanName = null; if (element.hasAttribute(REF_ATTRIBUTE)) { beanName = element.getAttribute(REF_ATTRIBUTE); @@ -86,8 +92,11 @@ public class GlobalChannelInterceptorParser extends AbstractBeanDefinitionParser if ("wire-tap".equals(child.getLocalName())) { beanName = new WireTapParser().parse(child, parserContext); } + else if (delegate.nodeNameEquals(child, BeanDefinitionParserDelegate.REF_ELEMENT)) { + return delegate.parsePropertySubElement(child, null); + } else { - BeanDefinition beanDef = parserContext.getDelegate().parseCustomElement(child); + BeanDefinition beanDef = delegate.parseCustomElement(child); beanName = BeanDefinitionReaderUtils.generateBeanName(beanDef, parserContext.getRegistry()); } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests-context.xml index 3661ae6c0b..c3b4ce461f 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests-context.xml +++ b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests-context.xml @@ -57,10 +57,12 @@ + - + +