From 495cf53ac6a838bce0b58a67707f4d34bf3525b8 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Wed, 23 Nov 2011 09:00:51 -0500 Subject: [PATCH] INT-2254 backporting to maint branch --- .../integration/support/MessageBuilder.java | 2 +- .../HttpRequestHandlingEndpointSupport.java | 22 ++++++++++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java b/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java index f029d3b5dc..b50b4bc42f 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/support/MessageBuilder.java @@ -183,7 +183,7 @@ public final class MessageBuilder { /** * Copy the name-value pairs from the provided Map. This operation will not overwrite any existing values. */ - public MessageBuilder copyHeadersIfAbsent(Map headersToCopy) { + public MessageBuilder copyHeadersIfAbsent(Map headersToCopy) { Set keys = headersToCopy.keySet(); for (String key : keys) { if (!this.isReadOnly(key)) { diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/HttpRequestHandlingEndpointSupport.java b/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/HttpRequestHandlingEndpointSupport.java index 363b016060..2607d7436a 100644 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/HttpRequestHandlingEndpointSupport.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/HttpRequestHandlingEndpointSupport.java @@ -260,12 +260,22 @@ abstract class HttpRequestHandlingEndpointSupport extends MessagingGatewaySuppor payload = this.convertParameterMap(servletRequest.getParameterMap()); } Map headers = this.headerMapper.toHeaders(request.getHeaders()); - Message message = MessageBuilder.withPayload(payload).copyHeaders(headers).setHeader( - org.springframework.integration.http.HttpHeaders.REQUEST_URL, request.getURI().toString()) - .setHeader(org.springframework.integration.http.HttpHeaders.REQUEST_METHOD, - request.getMethod().toString()).setHeader( - org.springframework.integration.http.HttpHeaders.USER_PRINCIPAL, - servletRequest.getUserPrincipal()).build(); + + MessageBuilder messageBuilder = null; + + if (payload instanceof Message){ + messageBuilder = MessageBuilder.fromMessage((Message) payload).copyHeadersIfAbsent(headers); + } + else { + messageBuilder = MessageBuilder.withPayload(payload).copyHeaders(headers); + } + + Message message = messageBuilder + .setHeader(org.springframework.integration.http.HttpHeaders.REQUEST_URL, request.getURI().toString()) + .setHeader(org.springframework.integration.http.HttpHeaders.REQUEST_METHOD, request.getMethod().toString()) + .setHeader(org.springframework.integration.http.HttpHeaders.USER_PRINCIPAL, servletRequest.getUserPrincipal()) + .build(); + Object reply = null; if (this.expectReply) { reply = this.sendAndReceiveMessage(message);