From c022a8d5598cd7f6670a8be3c04fe3da9cb9faf9 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Thu, 24 Jun 2010 19:16:52 +0000 Subject: [PATCH] INT-831, INT-861 added 'expectReply' property to HttpRequestExecutingMessageHandler (default is true) --- .../HttpRequestExecutingMessageHandler.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/HttpRequestExecutingMessageHandler.java b/spring-integration-http/src/main/java/org/springframework/integration/http/HttpRequestExecutingMessageHandler.java index dccf209c07..ce5835896d 100755 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/HttpRequestExecutingMessageHandler.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/HttpRequestExecutingMessageHandler.java @@ -25,6 +25,7 @@ import java.util.Map; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.integration.core.Message; @@ -52,6 +53,8 @@ public class HttpRequestExecutingMessageHandler extends AbstractReplyProducingMe private volatile OutboundRequestMapper requestMapper = new DefaultOutboundRequestMapper(); + private boolean expectReply = true; + private volatile Class expectedResponseType = Object.class; private final RestTemplate restTemplate = new RestTemplate(); @@ -94,6 +97,14 @@ public class HttpRequestExecutingMessageHandler extends AbstractReplyProducingMe this.defaultHttpMethod = defaultHttpMethod; } + /** + * Specify whether a reply Message is expected. If not, this handler will simply return null for a + * successful response or throw an Exception for a non-successful response. The default is true. + */ + public void setExpectReply(boolean expectReply) { + this.expectReply = expectReply; + } + /** * Specify the expected response type for the REST request. */ @@ -149,11 +160,14 @@ public class HttpRequestExecutingMessageHandler extends AbstractReplyProducingMe if (!isWritableRequestMethod(httpMethod) && httpRequest.getBody() != null) { httpRequest = new HttpEntity(null, httpRequest.getHeaders()); } - HttpEntity httpResponse = this.restTemplate.exchange(uri, httpMethod, httpRequest, this.expectedResponseType, uriVariables); - Object responseBody = httpResponse.getBody(); - MessageBuilder replyBuilder = (responseBody instanceof Message) ? - MessageBuilder.fromMessage((Message) responseBody) : MessageBuilder.withPayload(responseBody); - return replyBuilder.copyHeaders(httpResponse.getHeaders().toSingleValueMap()).build(); + ResponseEntity httpResponse = this.restTemplate.exchange(uri, httpMethod, httpRequest, this.expectedResponseType, uriVariables); + if (this.expectReply) { + Object responseBody = httpResponse.getBody(); + MessageBuilder replyBuilder = (responseBody instanceof Message) ? + MessageBuilder.fromMessage((Message) responseBody) : MessageBuilder.withPayload(responseBody); + return replyBuilder.copyHeaders(httpResponse.getHeaders().toSingleValueMap()).build(); + } + return null; } catch (MessagingException e) { throw e;