From 91c14bd1fe7f45fbd3568b0a7a2221dff0f76c5f Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Wed, 30 Nov 2011 11:07:38 +0000 Subject: [PATCH] SPR-8809 - RestTemplate headers not sent when bufferRequestBody is false --- .../client/InterceptingClientHttpRequest.java | 5 ++- ...treamingSimpleHttpRequestFactoryTests.java | 36 ++++++++++++++++++- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/org.springframework.web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequest.java b/org.springframework.web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequest.java index 37008ee8cfa..9798293ecfa 100644 --- a/org.springframework.web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequest.java +++ b/org.springframework.web/src/main/java/org/springframework/http/client/InterceptingClientHttpRequest.java @@ -85,9 +85,8 @@ class InterceptingClientHttpRequest extends AbstractBufferingClientHttpRequest { delegate.getHeaders().putAll(request.getHeaders()); - if (body.length > 0) { - FileCopyUtils.copy(body, delegate.getBody()); - } + FileCopyUtils.copy(body, delegate.getBody()); + return delegate.execute(); } } diff --git a/org.springframework.web/src/test/java/org/springframework/http/client/StreamingSimpleHttpRequestFactoryTests.java b/org.springframework.web/src/test/java/org/springframework/http/client/StreamingSimpleHttpRequestFactoryTests.java index 659adf2220c..c311ffb961f 100644 --- a/org.springframework.web/src/test/java/org/springframework/http/client/StreamingSimpleHttpRequestFactoryTests.java +++ b/org.springframework.web/src/test/java/org/springframework/http/client/StreamingSimpleHttpRequestFactoryTests.java @@ -16,14 +16,18 @@ package org.springframework.http.client; +import java.io.IOException; import java.io.OutputStream; import java.net.URI; +import java.util.Collections; import java.util.Random; import org.junit.Ignore; import org.junit.Test; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; +import org.springframework.http.HttpRequest; import org.springframework.http.HttpStatus; import static org.junit.Assert.*; @@ -37,6 +41,36 @@ public class StreamingSimpleHttpRequestFactoryTests extends AbstractHttpRequestF return factory; } + // SPR-8809 + @Test + public void interceptor() throws Exception { + final String headerName = "MyHeader"; + final String headerValue = "MyValue"; + ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() { + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + request.getHeaders().add(headerName, headerValue); + return execution.execute(request, body); + } + }; + InterceptingClientHttpRequestFactory factory = new InterceptingClientHttpRequestFactory(createRequestFactory(), + Collections.singletonList(interceptor)); + + ClientHttpResponse response = null; + try { + ClientHttpRequest request = factory.createRequest(new URI(baseUrl + "/echo"), HttpMethod.POST); + response = request.execute(); + assertEquals("Invalid response status", HttpStatus.OK, response.getStatusCode()); + HttpHeaders responseHeaders = response.getHeaders(); + assertEquals("Custom header invalid", headerValue, responseHeaders.getFirst(headerName)); + } + finally { + if (response != null) { + response.close(); + } + } + } + @Test @Ignore public void largeFileUpload() throws Exception { @@ -49,7 +83,7 @@ public class StreamingSimpleHttpRequestFactoryTests extends AbstractHttpRequestF final int contentLength = ITERATIONS * BUF_SIZE; // request.getHeaders().setContentLength(contentLength); OutputStream body = request.getBody(); - for (int i=0; i < ITERATIONS; i++) { + for (int i = 0; i < ITERATIONS; i++) { byte[] buffer = new byte[BUF_SIZE]; rnd.nextBytes(buffer); body.write(buffer);