diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParser.java b/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParser.java index 7c8af1976a..e04ea2509c 100644 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParser.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParser.java @@ -69,6 +69,7 @@ public class HttpOutboundChannelAdapterParser extends AbstractOutboundChannelAda IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "extract-payload"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "expected-response-type"); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "request-factory"); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "error-handler"); List uriVariableElements = DomUtils.getChildElementsByTagName(element, "uri-variable"); if (!CollectionUtils.isEmpty(uriVariableElements)) { Map uriVariableExpressions = new HashMap(); diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpOutboundGatewayParser.java b/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpOutboundGatewayParser.java index 105684dc0c..febb3347b6 100644 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpOutboundGatewayParser.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpOutboundGatewayParser.java @@ -75,6 +75,7 @@ public class HttpOutboundGatewayParser extends AbstractConsumerEndpointParser { IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "expected-response-type"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "request-timeout", "sendTimeout"); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "request-factory"); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "error-handler"); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "reply-channel", "outputChannel"); List uriVariableElements = DomUtils.getChildElementsByTagName(element, "uri-variable"); if (!CollectionUtils.isEmpty(uriVariableElements)) { diff --git a/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd b/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd index 201555339b..9a5fd60fc6 100644 --- a/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd +++ b/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd @@ -245,6 +245,9 @@ + @@ -252,6 +255,18 @@ + + + + + + + + + + + @@ -354,6 +372,18 @@ + + + + + + + + + + @@ -31,6 +32,8 @@ + + diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParserTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParserTests.java index b2dfb1e809..0b690a9444 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParserTests.java +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundChannelAdapterParserTests.java @@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.io.IOException; import java.util.Map; import org.junit.Test; @@ -32,12 +33,14 @@ import org.springframework.context.ApplicationContext; import org.springframework.expression.Expression; import org.springframework.http.HttpMethod; import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.integration.endpoint.AbstractEndpoint; import org.springframework.integration.http.HttpRequestExecutingMessageHandler; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.util.ObjectUtils; +import org.springframework.web.client.ResponseErrorHandler; /** * @author Mark Fisher @@ -94,6 +97,8 @@ public class HttpOutboundChannelAdapterParserTests { assertEquals(converterListBean, templateAccessor.getPropertyValue("messageConverters")); Object requestFactoryBean = this.applicationContext.getBean("testRequestFactory"); assertEquals(requestFactoryBean, requestFactory); + Object errorHandlerBean = this.applicationContext.getBean("testErrorHandler"); + assertEquals(errorHandlerBean, templateAccessor.getPropertyValue("errorHandler")); assertEquals("http://localhost/test2/{foo}", handlerAccessor.getPropertyValue("uri")); assertEquals(HttpMethod.GET, handlerAccessor.getPropertyValue("httpMethod")); assertEquals("UTF-8", handlerAccessor.getPropertyValue("charset")); @@ -111,4 +116,15 @@ public class HttpOutboundChannelAdapterParserTests { assertTrue(ObjectUtils.containsElement(mappedRequestHeaders, "requestHeader2")); } + + public static class StubErrorHandler implements ResponseErrorHandler { + + public boolean hasError(ClientHttpResponse response) throws IOException { + return false; + } + + public void handleError(ClientHttpResponse response) throws IOException { + } + } + } diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundGatewayParserTests-context.xml b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundGatewayParserTests-context.xml index a36d0c3d90..5069345cc3 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundGatewayParserTests-context.xml +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundGatewayParserTests-context.xml @@ -31,6 +31,7 @@ expected-response-type="java.lang.String" mapped-request-headers="requestHeader1, requestHeader2" mapped-response-headers="responseHeader" + error-handler="testErrorHandler" reply-channel="replies" charset="UTF-8" order="77" @@ -40,6 +41,8 @@ + + diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundGatewayParserTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundGatewayParserTests.java index c0a89de85d..80ba14e3b1 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundGatewayParserTests.java +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpOutboundGatewayParserTests.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.io.IOException; import java.util.Map; import org.junit.Test; @@ -33,6 +34,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.expression.Expression; import org.springframework.http.HttpMethod; import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.integration.MessageChannel; import org.springframework.integration.endpoint.AbstractEndpoint; @@ -40,6 +42,7 @@ import org.springframework.integration.http.HttpRequestExecutingMessageHandler; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.util.ObjectUtils; +import org.springframework.web.client.ResponseErrorHandler; /** * @author Mark Fisher @@ -105,6 +108,8 @@ public class HttpOutboundGatewayParserTests { assertEquals(false, handlerAccessor.getPropertyValue("extractPayload")); Object requestFactoryBean = this.applicationContext.getBean("testRequestFactory"); assertEquals(requestFactoryBean, requestFactory); + Object errorHandlerBean = this.applicationContext.getBean("testErrorHandler"); + assertEquals(errorHandlerBean, templateAccessor.getPropertyValue("errorHandler")); Object sendTimeout = new DirectFieldAccessor( handlerAccessor.getPropertyValue("messagingTemplate")).getPropertyValue("sendTimeout"); assertEquals(new Long("1234"), sendTimeout); @@ -122,4 +127,15 @@ public class HttpOutboundGatewayParserTests { assertEquals("responseHeader", mappedResponseHeaders[0]); } + + public static class StubErrorHandler implements ResponseErrorHandler { + + public boolean hasError(ClientHttpResponse response) throws IOException { + return false; + } + + public void handleError(ClientHttpResponse response) throws IOException { + } + } + }