diff --git a/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractMessageChannel.java b/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractMessageChannel.java
index 560fa34b28..40a93834be 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractMessageChannel.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractMessageChannel.java
@@ -415,7 +415,7 @@ public abstract class AbstractMessageChannel extends IntegrationObjectSupport
* false if the message cannot be sent within the allotted
* time or the sending thread is interrupted.
*/
- @Override
+ @Override // NOSONAR complexity
public boolean send(Message> messageArg, long timeout) {
Assert.notNull(messageArg, "message must not be null");
Assert.notNull(messageArg.getPayload(), "message payload must not be null");
diff --git a/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractPollableChannel.java b/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractPollableChannel.java
index 0f6f0b9e9e..051165592e 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractPollableChannel.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractPollableChannel.java
@@ -87,7 +87,7 @@ public abstract class AbstractPollableChannel extends AbstractMessageChannel
* is available within the allotted time or the receiving thread is
* interrupted.
*/
- @Override
+ @Override // NOSONAR complexity
@Nullable
public Message> receive(long timeout) {
ChannelInterceptorList interceptorList = getIChannelInterceptorList();
@@ -119,7 +119,7 @@ public abstract class AbstractPollableChannel extends AbstractMessageChannel
counted = true;
}
- if (traceEnabled) {
+ if (logger.isDebugEnabled()) {
logger.debug("postReceive on channel '" + this + "', message: " + message);
}
}
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 852ed96003..a4ba3d0db7 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
@@ -97,7 +97,8 @@ public abstract class AbstractConsumerEndpointParser extends AbstractBeanDefinit
ManagedList adviceChain = IntegrationNamespaceUtils.configureAdviceChain(adviceChainElement, txElement, true,
handlerBuilder.getRawBeanDefinition(), parserContext);
- if (!CollectionUtils.isEmpty(adviceChain)) {
+ boolean hasAdviceChain = !CollectionUtils.isEmpty(adviceChain);
+ if (hasAdviceChain) {
handlerBuilder.addPropertyValue("adviceChain", adviceChain);
}
@@ -111,12 +112,11 @@ public abstract class AbstractConsumerEndpointParser extends AbstractBeanDefinit
+ "' attribute isn't allowed for a nested (e.g. inside a ) endpoint element: "
+ elementDescription + ".", element);
}
- if (!replyChannelInChainAllowed(element)) {
- if (StringUtils.hasText(element.getAttribute("reply-channel"))) {
- parserContext.getReaderContext().error("The 'reply-channel' attribute isn't"
- + " allowed for a nested (e.g. inside a ) outbound gateway element: "
- + elementDescription + ".", element);
- }
+ if (!replyChannelInChainAllowed(element)
+ && StringUtils.hasText(element.getAttribute("reply-channel"))) {
+ parserContext.getReaderContext().error("The 'reply-channel' attribute isn't"
+ + " allowed for a nested (e.g. inside a ) outbound gateway element: "
+ + elementDescription + ".", element);
}
return handlerBeanDefinition;
}
@@ -131,7 +131,7 @@ public abstract class AbstractConsumerEndpointParser extends AbstractBeanDefinit
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(ConsumerEndpointFactoryBean.class);
- if (!CollectionUtils.isEmpty(adviceChain)) {
+ if (hasAdviceChain) {
builder.addPropertyValue("adviceChain", adviceChain);
}
@@ -151,13 +151,7 @@ public abstract class AbstractConsumerEndpointParser extends AbstractBeanDefinit
builder.addPropertyValue("inputChannelName", inputChannelName);
List pollerElementList = DomUtils.getChildElementsByTagName(element, "poller");
- if (!CollectionUtils.isEmpty(pollerElementList)) {
- if (pollerElementList.size() != 1) {
- parserContext.getReaderContext().error(
- "at most one poller element may be configured for an endpoint", element);
- }
- IntegrationNamespaceUtils.configurePollerMetadata(pollerElementList.get(0), builder, parserContext);
- }
+ poller(element, parserContext, builder, pollerElementList);
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, IntegrationNamespaceUtils.AUTO_STARTUP);
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, IntegrationNamespaceUtils.PHASE);
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, IntegrationNamespaceUtils.ROLE);
@@ -168,6 +162,17 @@ public abstract class AbstractConsumerEndpointParser extends AbstractBeanDefinit
return null;
}
+ private void poller(Element element, ParserContext parserContext, BeanDefinitionBuilder builder,
+ List pollerElementList) {
+ if (!CollectionUtils.isEmpty(pollerElementList)) {
+ if (pollerElementList.size() != 1) {
+ parserContext.getReaderContext().error(
+ "at most one poller element may be configured for an endpoint", element);
+ }
+ IntegrationNamespaceUtils.configurePollerMetadata(pollerElementList.get(0), builder, parserContext);
+ }
+ }
+
private void registerChannelForCreation(ParserContext parserContext, String inputChannelName) {
if (parserContext.getRegistry()
.containsBeanDefinition(IntegrationContextUtils.AUTO_CREATE_CHANNEL_CANDIDATES_BEAN_NAME)) {
diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractDelegatingConsumerEndpointParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractDelegatingConsumerEndpointParser.java
index b60f579b7c..b94a16fdec 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractDelegatingConsumerEndpointParser.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractDelegatingConsumerEndpointParser.java
@@ -42,7 +42,8 @@ abstract class AbstractDelegatingConsumerEndpointParser extends AbstractConsumer
protected final BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) {
Object source = parserContext.extractSource(element);
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(this.getFactoryBeanClassName());
- BeanComponentDefinition innerDefinition = IntegrationNamespaceUtils.parseInnerHandlerDefinition(element, parserContext);
+ BeanComponentDefinition innerDefinition = IntegrationNamespaceUtils.parseInnerHandlerDefinition(element,
+ parserContext);
String ref = element.getAttribute(REF_ATTRIBUTE);
String expression = element.getAttribute(EXPRESSION_ATTRIBUTE);
boolean hasRef = StringUtils.hasText(ref);
@@ -50,38 +51,15 @@ abstract class AbstractDelegatingConsumerEndpointParser extends AbstractConsumer
Element scriptElement = DomUtils.getChildElementByTagName(element, "script");
Element expressionElement = DomUtils.getChildElementByTagName(element, "expression");
if (innerDefinition != null) {
- if (hasRef || hasExpression || expressionElement != null) {
- parserContext.getReaderContext().error(
- "Neither 'ref' nor 'expression' are permitted when an inner bean () is configured on element " +
- IntegrationNamespaceUtils.createElementDescription(element) + ".", source);
- return null;
- }
- builder.addPropertyValue("targetObject", innerDefinition);
+ innerDefinition(element, parserContext, source, builder, innerDefinition, hasRef, hasExpression,
+ expressionElement);
}
else if (scriptElement != null) {
- if (hasRef || hasExpression || expressionElement != null) {
- parserContext.getReaderContext().error(
- "Neither 'ref' nor 'expression' are permitted when an inner script element is configured on element " +
- IntegrationNamespaceUtils.createElementDescription(element) + ".", source);
- return null;
- }
- BeanDefinition scriptBeanDefinition = parserContext.getDelegate().parseCustomElement(scriptElement, builder.getBeanDefinition());
- builder.addPropertyValue("targetObject", scriptBeanDefinition);
+ scriptElement(element, parserContext, source, builder, hasRef, hasExpression, scriptElement,
+ expressionElement);
}
else if (expressionElement != null) {
- if (hasRef || hasExpression) {
- parserContext.getReaderContext().error(
- "Neither 'ref' nor 'expression' are permitted when an inner 'expression' element is configured on element " +
- IntegrationNamespaceUtils.createElementDescription(element) + ".", source);
- return null;
- }
- BeanDefinitionBuilder dynamicExpressionBuilder = BeanDefinitionBuilder.genericBeanDefinition(
- DynamicExpression.class);
- String key = expressionElement.getAttribute("key");
- String expressionSourceReference = expressionElement.getAttribute("source");
- dynamicExpressionBuilder.addConstructorArgValue(key);
- dynamicExpressionBuilder.addConstructorArgReference(expressionSourceReference);
- builder.addPropertyValue("expression", dynamicExpressionBuilder.getBeanDefinition());
+ expressionElement(element, parserContext, source, builder, hasRef, hasExpression, expressionElement);
}
else if (hasRef && hasExpression) {
parserContext.getReaderContext().error(
@@ -109,6 +87,45 @@ abstract class AbstractDelegatingConsumerEndpointParser extends AbstractConsumer
return builder;
}
+ private void innerDefinition(Element element, ParserContext parserContext, Object source,
+ BeanDefinitionBuilder builder, BeanComponentDefinition innerDefinition, boolean hasRef,
+ boolean hasExpression, Element expressionElement) {
+ if (hasRef || hasExpression || expressionElement != null) {
+ parserContext.getReaderContext().error(
+ "Neither 'ref' nor 'expression' are permitted when an inner bean () is configured on element " +
+ IntegrationNamespaceUtils.createElementDescription(element) + ".", source);
+ }
+ builder.addPropertyValue("targetObject", innerDefinition);
+ }
+
+ private void scriptElement(Element element, ParserContext parserContext, Object source,
+ BeanDefinitionBuilder builder, boolean hasRef, boolean hasExpression, Element scriptElement,
+ Element expressionElement) {
+ if (hasRef || hasExpression || expressionElement != null) {
+ parserContext.getReaderContext().error(
+ "Neither 'ref' nor 'expression' are permitted when an inner script element is configured on element " +
+ IntegrationNamespaceUtils.createElementDescription(element) + ".", source);
+ }
+ BeanDefinition scriptBeanDefinition = parserContext.getDelegate().parseCustomElement(scriptElement, builder.getBeanDefinition());
+ builder.addPropertyValue("targetObject", scriptBeanDefinition);
+ }
+
+ private void expressionElement(Element element, ParserContext parserContext, Object source,
+ BeanDefinitionBuilder builder, boolean hasRef, boolean hasExpression, Element expressionElement) {
+ if (hasRef || hasExpression) {
+ parserContext.getReaderContext().error(
+ "Neither 'ref' nor 'expression' are permitted when an inner 'expression' element is configured on element " +
+ IntegrationNamespaceUtils.createElementDescription(element) + ".", source);
+ }
+ BeanDefinitionBuilder dynamicExpressionBuilder = BeanDefinitionBuilder.genericBeanDefinition(
+ DynamicExpression.class);
+ String key = expressionElement.getAttribute("key");
+ String expressionSourceReference = expressionElement.getAttribute("source");
+ dynamicExpressionBuilder.addConstructorArgValue(key);
+ dynamicExpressionBuilder.addConstructorArgReference(expressionSourceReference);
+ builder.addPropertyValue("expression", dynamicExpressionBuilder.getBeanDefinition());
+ }
+
private void methodAttribute(Element element, ParserContext parserContext, Object source,
BeanDefinitionBuilder builder, BeanComponentDefinition innerDefinition, boolean hasRef,
boolean hasExpression, Element expressionElement) {
diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/DefaultInboundChannelAdapterParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/DefaultInboundChannelAdapterParser.java
index 75538282cc..860ca71b48 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/DefaultInboundChannelAdapterParser.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/DefaultInboundChannelAdapterParser.java
@@ -46,7 +46,7 @@ import org.springframework.util.xml.DomUtils;
*/
public class DefaultInboundChannelAdapterParser extends AbstractPollingInboundChannelAdapterParser {
- @Override
+ @Override // NOSONAR complexity
protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) {
Object source = parserContext.extractSource(element);
BeanMetadataElement result = null;
diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/EnricherParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/EnricherParser.java
index 2e6d557972..61b3ec303c 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/EnricherParser.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/EnricherParser.java
@@ -59,6 +59,26 @@ public class EnricherParser extends AbstractConsumerEndpointParser {
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "request-timeout");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "reply-timeout");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "requires-reply");
+ propertySubElements(element, parserContext, builder);
+
+ headerSubElements(element, parserContext, builder);
+
+ IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "should-clone-payload");
+
+ String requestPayloadExpression = element.getAttribute("request-payload-expression");
+
+ if (StringUtils.hasText(requestPayloadExpression)) {
+ BeanDefinitionBuilder expressionBuilder =
+ BeanDefinitionBuilder.genericBeanDefinition(ExpressionFactoryBean.class)
+ .addConstructorArgValue(requestPayloadExpression);
+ builder.addPropertyValue("requestPayloadExpression", expressionBuilder.getBeanDefinition());
+ }
+
+ return builder;
+ }
+
+ private void propertySubElements(Element element, ParserContext parserContext,
+ final BeanDefinitionBuilder builder) {
List subElements = DomUtils.getChildElementsByTagName(element, "property");
if (!CollectionUtils.isEmpty(subElements)) {
ManagedMap expressions = new ManagedMap();
@@ -83,39 +103,9 @@ public class EnricherParser extends AbstractConsumerEndpointParser {
.error("One of 'value' or 'expression' or 'null-result-expression' is required", element);
}
- BeanDefinition expressionDef = null;
- BeanDefinition nullResultExpressionExpressionDef;
-
- if (hasAttributeValue) {
- BeanDefinitionBuilder expressionBuilder =
- BeanDefinitionBuilder.genericBeanDefinition(ValueExpression.class);
- if (StringUtils.hasText(type)) {
- expressionBuilder.addConstructorArgValue(new TypedStringValue(value, type));
- }
- else {
- expressionBuilder.addConstructorArgValue(value);
- }
- expressionDef = expressionBuilder.getBeanDefinition();
- }
- else if (hasAttributeExpression) {
- if (StringUtils.hasText(type)) {
- parserContext.getReaderContext().error("The 'type' attribute for '' of '' " +
- "is not allowed with an 'expression' attribute.", element);
- }
- expressionDef = BeanDefinitionBuilder
- .genericBeanDefinition(ExpressionFactoryBean.class)
- .addConstructorArgValue(expression)
- .getBeanDefinition();
- }
- if (expressionDef != null) {
- expressions.put(name, expressionDef);
- }
- if (hasAttributeNullResultExpression) {
- nullResultExpressionExpressionDef =
- BeanDefinitionBuilder.genericBeanDefinition(ExpressionFactoryBean.class)
- .addConstructorArgValue(nullResultExpression).getBeanDefinition();
- nullResultExpressions.put(name, nullResultExpressionExpressionDef);
- }
+ expression(element, parserContext, expressions, nullResultExpressions, name, value, type, expression,
+ nullResultExpression, hasAttributeValue, hasAttributeExpression,
+ hasAttributeNullResultExpression);
}
if (expressions.size() > 0) {
builder.addPropertyValue("propertyExpressions", expressions);
@@ -124,7 +114,50 @@ public class EnricherParser extends AbstractConsumerEndpointParser {
builder.addPropertyValue("nullResultPropertyExpressions", nullResultExpressions);
}
}
+ }
+ private void expression(Element element, ParserContext parserContext, ManagedMap expressions,
+ ManagedMap nullResultExpressions, String name, String value, String type, String expression,
+ String nullResultExpression, boolean hasAttributeValue, boolean hasAttributeExpression,
+ boolean hasAttributeNullResultExpression) {
+
+ BeanDefinition expressionDef = null;
+ BeanDefinition nullResultExpressionExpressionDef;
+
+ if (hasAttributeValue) {
+ BeanDefinitionBuilder expressionBuilder =
+ BeanDefinitionBuilder.genericBeanDefinition(ValueExpression.class);
+ if (StringUtils.hasText(type)) {
+ expressionBuilder.addConstructorArgValue(new TypedStringValue(value, type));
+ }
+ else {
+ expressionBuilder.addConstructorArgValue(value);
+ }
+ expressionDef = expressionBuilder.getBeanDefinition();
+ }
+ else if (hasAttributeExpression) {
+ if (StringUtils.hasText(type)) {
+ parserContext.getReaderContext().error("The 'type' attribute for '' of '' " +
+ "is not allowed with an 'expression' attribute.", element);
+ }
+ expressionDef = BeanDefinitionBuilder
+ .genericBeanDefinition(ExpressionFactoryBean.class)
+ .addConstructorArgValue(expression)
+ .getBeanDefinition();
+ }
+ if (expressionDef != null) {
+ expressions.put(name, expressionDef);
+ }
+ if (hasAttributeNullResultExpression) {
+ nullResultExpressionExpressionDef =
+ BeanDefinitionBuilder.genericBeanDefinition(ExpressionFactoryBean.class)
+ .addConstructorArgValue(nullResultExpression).getBeanDefinition();
+ nullResultExpressions.put(name, nullResultExpressionExpressionDef);
+ }
+ }
+
+ private void headerSubElements(Element element, ParserContext parserContext, final BeanDefinitionBuilder builder) {
+ List subElements;
subElements = DomUtils.getChildElementsByTagName(element, "header");
if (!CollectionUtils.isEmpty(subElements)) {
ManagedMap expressions = new ManagedMap();
@@ -144,45 +177,11 @@ public class EnricherParser extends AbstractConsumerEndpointParser {
if (!hasAttributeValue && !hasAttributeExpression && !hasAttributeNullResultExpression) {
parserContext.getReaderContext()
- .error("One of 'value' or 'expression' or 'null-result-expression' is required", subElement);
- }
- BeanDefinition expressionDef = null;
- if (hasAttributeValue) {
- expressionDef = new RootBeanDefinition(LiteralExpression.class);
- expressionDef.getConstructorArgumentValues().addGenericArgumentValue(valueElementValue);
- }
- else if (hasAttributeExpression) {
- expressionDef =
- IntegrationNamespaceUtils.createExpressionDefIfAttributeDefined(EXPRESSION_ATTRIBUTE,
+ .error("One of 'value' or 'expression' or 'null-result-expression' is required",
subElement);
}
-
- if (StringUtils.hasText(subElement.getAttribute(EXPRESSION_ATTRIBUTE))
- && StringUtils.hasText(subElement.getAttribute(TYPE_ATTRIBUTE))) {
- parserContext.getReaderContext()
- .warning("The use of a 'type' attribute is deprecated since 4.0 "
- + "when using 'expression'", subElement);
- }
- if (expressionDef != null) {
- BeanDefinitionBuilder valueProcessorBuilder = BeanDefinitionBuilder
- .genericBeanDefinition(ExpressionEvaluatingHeaderValueMessageProcessor.class)
- .addConstructorArgValue(expressionDef)
- .addConstructorArgValue(subElement.getAttribute(TYPE_ATTRIBUTE));
- IntegrationNamespaceUtils.setValueIfAttributeDefined(valueProcessorBuilder, subElement,
- "overwrite");
- expressions.put(name, valueProcessorBuilder.getBeanDefinition());
- }
- if (hasAttributeNullResultExpression) {
- BeanDefinition nullResultExpressionDefinition = IntegrationNamespaceUtils
- .createExpressionDefIfAttributeDefined("null-result-expression", subElement);
- BeanDefinitionBuilder nullResultValueProcessorBuilder = BeanDefinitionBuilder
- .genericBeanDefinition(ExpressionEvaluatingHeaderValueMessageProcessor.class)
- .addConstructorArgValue(nullResultExpressionDefinition)
- .addConstructorArgValue(subElement.getAttribute(TYPE_ATTRIBUTE));
- IntegrationNamespaceUtils.setValueIfAttributeDefined(nullResultValueProcessorBuilder, subElement,
- "overwrite");
- nullResultHeaderExpressions.put(name, nullResultValueProcessorBuilder.getBeanDefinition());
- }
+ headerExpression(parserContext, expressions, nullResultHeaderExpressions, subElement, name,
+ valueElementValue, hasAttributeValue, hasAttributeExpression, hasAttributeNullResultExpression);
}
if (expressions.size() > 0) {
builder.addPropertyValue("headerExpressions", expressions);
@@ -191,19 +190,50 @@ public class EnricherParser extends AbstractConsumerEndpointParser {
builder.addPropertyValue("nullResultHeaderExpressions", nullResultHeaderExpressions);
}
}
+ }
- IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "should-clone-payload");
+ private void headerExpression(ParserContext parserContext, ManagedMap expressions,
+ ManagedMap nullResultHeaderExpressions, Element subElement, String name,
+ String valueElementValue, boolean hasAttributeValue, boolean hasAttributeExpression,
+ boolean hasAttributeNullResultExpression) {
- String requestPayloadExpression = element.getAttribute("request-payload-expression");
-
- if (StringUtils.hasText(requestPayloadExpression)) {
- BeanDefinitionBuilder expressionBuilder =
- BeanDefinitionBuilder.genericBeanDefinition(ExpressionFactoryBean.class)
- .addConstructorArgValue(requestPayloadExpression);
- builder.addPropertyValue("requestPayloadExpression", expressionBuilder.getBeanDefinition());
+ BeanDefinition expressionDef = null;
+ if (hasAttributeValue) {
+ expressionDef = new RootBeanDefinition(LiteralExpression.class);
+ expressionDef.getConstructorArgumentValues().addGenericArgumentValue(valueElementValue);
+ }
+ else if (hasAttributeExpression) {
+ expressionDef =
+ IntegrationNamespaceUtils.createExpressionDefIfAttributeDefined(EXPRESSION_ATTRIBUTE,
+ subElement);
}
- return builder;
+ if (StringUtils.hasText(subElement.getAttribute(EXPRESSION_ATTRIBUTE))
+ && StringUtils.hasText(subElement.getAttribute(TYPE_ATTRIBUTE))) {
+ parserContext.getReaderContext()
+ .warning("The use of a 'type' attribute is deprecated since 4.0 "
+ + "when using 'expression'", subElement);
+ }
+ if (expressionDef != null) {
+ BeanDefinitionBuilder valueProcessorBuilder = BeanDefinitionBuilder
+ .genericBeanDefinition(ExpressionEvaluatingHeaderValueMessageProcessor.class)
+ .addConstructorArgValue(expressionDef)
+ .addConstructorArgValue(subElement.getAttribute(TYPE_ATTRIBUTE));
+ IntegrationNamespaceUtils.setValueIfAttributeDefined(valueProcessorBuilder, subElement,
+ "overwrite");
+ expressions.put(name, valueProcessorBuilder.getBeanDefinition());
+ }
+ if (hasAttributeNullResultExpression) {
+ BeanDefinition nullResultExpressionDefinition = IntegrationNamespaceUtils
+ .createExpressionDefIfAttributeDefined("null-result-expression", subElement);
+ BeanDefinitionBuilder nullResultValueProcessorBuilder = BeanDefinitionBuilder
+ .genericBeanDefinition(ExpressionEvaluatingHeaderValueMessageProcessor.class)
+ .addConstructorArgValue(nullResultExpressionDefinition)
+ .addConstructorArgValue(subElement.getAttribute(TYPE_ATTRIBUTE));
+ IntegrationNamespaceUtils.setValueIfAttributeDefined(nullResultValueProcessorBuilder, subElement,
+ "overwrite");
+ nullResultHeaderExpressions.put(name, nullResultValueProcessorBuilder.getBeanDefinition());
+ }
}
@Override
diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GatewayParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GatewayParser.java
index 73950101c8..097c73e347 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GatewayParser.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GatewayParser.java
@@ -51,7 +51,6 @@ public class GatewayParser implements BeanDefinitionParser {
private final MessagingGatewayRegistrar registrar = new MessagingGatewayRegistrar();
@Override
- @SuppressWarnings("rawtypes")
public BeanDefinition parse(final Element element, ParserContext parserContext) {
boolean isNested = parserContext.isNested();
@@ -80,6 +79,24 @@ public class GatewayParser implements BeanDefinitionParser {
element.getAttribute(isNested ? "request-timeout" : "default-request-timeout"));
+ headers(element, gatewayAttributes);
+
+ methods(element, parserContext, gatewayAttributes);
+
+ gatewayAttributes.put("serviceInterface", element.getAttribute("service-interface"));
+
+ BeanDefinitionHolder gatewayHolder = this.registrar.parse(gatewayAttributes);
+ if (isNested) {
+ return gatewayHolder.getBeanDefinition();
+ }
+ else {
+ BeanDefinitionReaderUtils.registerBeanDefinition(gatewayHolder, parserContext.getRegistry());
+ return null;
+ }
+ }
+
+ @SuppressWarnings("rawtypes")
+ private void headers(final Element element, final Map gatewayAttributes) {
List headerElements = DomUtils.getChildElementsByTagName(element, "default-header");
if (!CollectionUtils.isEmpty(headerElements)) {
List