From 53ddea4b63e1a276903397ddb87ce6db17c88c8c Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Mon, 26 Jul 2010 18:16:50 +0000 Subject: [PATCH] INT-1214 HttpRequestExecutingMessageHandler now uses DefaultHttpHeaderMapper by default but exposes a setter for other implementations of HeaderMapper --- .../HttpRequestExecutingMessageHandler.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 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 a565cb41a8..b7cd82fa34 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 @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.http.client.ClientHttpRequestFactory; @@ -28,6 +29,7 @@ import org.springframework.http.converter.HttpMessageConverter; import org.springframework.integration.core.Message; import org.springframework.integration.core.MessagingException; import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; +import org.springframework.integration.message.HeaderMapper; import org.springframework.integration.message.MessageBuilder; import org.springframework.integration.message.MessageHandler; import org.springframework.integration.message.MessageHandlingException; @@ -54,6 +56,8 @@ public class HttpRequestExecutingMessageHandler extends AbstractReplyProducingMe private final DefaultOutboundRequestMapper requestMapper = new DefaultOutboundRequestMapper(); + private volatile HeaderMapper headerMapper = new DefaultHttpHeaderMapper(); + private final RestTemplate restTemplate = new RestTemplate(); private ParameterExtractor parameterExtractor = new DefaultParameterExtractor(); @@ -135,6 +139,14 @@ public class HttpRequestExecutingMessageHandler extends AbstractReplyProducingMe this.restTemplate.setMessageConverters(messageConverters); } + /** + * Set the {@link HeaderMapper} to use when mapping between HTTP headers and MessageHeaders. + */ + public void setHeaderMapper(HeaderMapper headerMapper) { + Assert.notNull(headerMapper, "headerMapper must not be null"); + this.headerMapper = headerMapper; + } + /** * Set the {@link ClientHttpRequestFactory} for the underlying {@link RestTemplate}. * @see RestTemplate#setRequestFactory(ClientHttpRequestFactory) @@ -160,14 +172,15 @@ public class HttpRequestExecutingMessageHandler extends AbstractReplyProducingMe HttpEntity httpRequest = this.requestMapper.fromMessage(requestMessage); ResponseEntity httpResponse = this.restTemplate.exchange(this.uri, this.httpMethod, httpRequest, this.expectedResponseType, uriVariables); if (this.expectReply) { + Map headers = this.headerMapper.toHeaders(httpResponse.getHeaders()); if (httpResponse.hasBody()) { Object responseBody = httpResponse.getBody(); MessageBuilder replyBuilder = (responseBody instanceof Message) ? MessageBuilder.fromMessage((Message) responseBody) : MessageBuilder.withPayload(responseBody); - return replyBuilder.copyHeaders(httpResponse.getHeaders().toSingleValueMap()).build(); + return replyBuilder.copyHeaders(headers).build(); } else { - return MessageBuilder.withPayload(httpResponse.getStatusCode()).copyHeaders(httpResponse.getHeaders().toSingleValueMap()).build(); + return MessageBuilder.withPayload(httpResponse.getStatusCode()).copyHeaders(headers).build(); } } return null;