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 @@
+
-
+
+