Add headers in InterceptingClientHttpRequest
This commit *adds* the "intercepted" headers to the ClientHttpRequest, as opposed to replacing them, which is what happened before this commit. Issue: SPR-15166
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -26,7 +26,6 @@ import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@@ -37,25 +36,20 @@ import org.springframework.http.client.support.HttpRequestWrapper;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/** @author Arjen Poutsma */
|
||||
/**
|
||||
* @author Arjen Poutsma
|
||||
* @author Juergen Hoeller
|
||||
*/
|
||||
public class InterceptingClientHttpRequestFactoryTests {
|
||||
|
||||
private RequestFactoryMock requestFactoryMock = new RequestFactoryMock();
|
||||
|
||||
private RequestMock requestMock = new RequestMock();
|
||||
|
||||
private ResponseMock responseMock = new ResponseMock();
|
||||
|
||||
private InterceptingClientHttpRequestFactory requestFactory;
|
||||
|
||||
private RequestFactoryMock requestFactoryMock;
|
||||
|
||||
private RequestMock requestMock;
|
||||
|
||||
private ResponseMock responseMock;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
|
||||
requestFactoryMock = new RequestFactoryMock();
|
||||
requestMock = new RequestMock();
|
||||
responseMock = new ResponseMock();
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void basic() throws Exception {
|
||||
@@ -78,6 +72,7 @@ public class InterceptingClientHttpRequestFactoryTests {
|
||||
@Test
|
||||
public void noExecution() throws Exception {
|
||||
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
|
||||
|
||||
interceptors.add(new ClientHttpRequestInterceptor() {
|
||||
@Override
|
||||
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
|
||||
@@ -101,29 +96,29 @@ public class InterceptingClientHttpRequestFactoryTests {
|
||||
public void changeHeaders() throws Exception {
|
||||
final String headerName = "Foo";
|
||||
final String headerValue = "Bar";
|
||||
final String otherValue = "Baz";
|
||||
|
||||
ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
|
||||
@Override
|
||||
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
|
||||
throws IOException {
|
||||
|
||||
return execution.execute(new HttpRequestWrapper(request) {
|
||||
@Override
|
||||
public HttpHeaders getHeaders() {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.set(headerName, headerValue);
|
||||
return headers;
|
||||
}
|
||||
}, body);
|
||||
HttpRequestWrapper wrapper = new HttpRequestWrapper(request);
|
||||
wrapper.getHeaders().add(headerName, otherValue);
|
||||
return execution.execute(wrapper, body);
|
||||
}
|
||||
};
|
||||
|
||||
requestMock = new RequestMock() {
|
||||
@Override
|
||||
public ClientHttpResponse execute() throws IOException {
|
||||
assertEquals(headerValue, getHeaders().getFirst(headerName));
|
||||
List<String> headerValues = getHeaders().get(headerName);
|
||||
assertEquals(2, headerValues.size());
|
||||
assertEquals(headerValue, headerValues.get(0));
|
||||
assertEquals(otherValue, headerValues.get(1));
|
||||
return super.execute();
|
||||
}
|
||||
};
|
||||
requestMock.getHeaders().add(headerName, headerValue);
|
||||
|
||||
requestFactory =
|
||||
new InterceptingClientHttpRequestFactory(requestFactoryMock, Collections.singletonList(interceptor));
|
||||
@@ -135,11 +130,11 @@ public class InterceptingClientHttpRequestFactoryTests {
|
||||
@Test
|
||||
public void changeURI() throws Exception {
|
||||
final URI changedUri = new URI("http://example.com/2");
|
||||
|
||||
ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
|
||||
@Override
|
||||
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
|
||||
throws IOException {
|
||||
|
||||
return execution.execute(new HttpRequestWrapper(request) {
|
||||
@Override
|
||||
public URI getURI() {
|
||||
@@ -168,11 +163,11 @@ public class InterceptingClientHttpRequestFactoryTests {
|
||||
@Test
|
||||
public void changeMethod() throws Exception {
|
||||
final HttpMethod changedMethod = HttpMethod.POST;
|
||||
|
||||
ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
|
||||
@Override
|
||||
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
|
||||
throws IOException {
|
||||
|
||||
return execution.execute(new HttpRequestWrapper(request) {
|
||||
@Override
|
||||
public HttpMethod getMethod() {
|
||||
@@ -201,11 +196,11 @@ public class InterceptingClientHttpRequestFactoryTests {
|
||||
@Test
|
||||
public void changeBody() throws Exception {
|
||||
final byte[] changedBody = "Foo".getBytes();
|
||||
|
||||
ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
|
||||
@Override
|
||||
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
|
||||
throws IOException {
|
||||
|
||||
return execution.execute(request, changedBody);
|
||||
}
|
||||
};
|
||||
@@ -218,6 +213,7 @@ public class InterceptingClientHttpRequestFactoryTests {
|
||||
assertTrue(Arrays.equals(changedBody, requestMock.body.toByteArray()));
|
||||
}
|
||||
|
||||
|
||||
private static class NoOpInterceptor implements ClientHttpRequestInterceptor {
|
||||
|
||||
private boolean invoked = false;
|
||||
@@ -230,6 +226,7 @@ public class InterceptingClientHttpRequestFactoryTests {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private class RequestFactoryMock implements ClientHttpRequestFactory {
|
||||
|
||||
@Override
|
||||
@@ -241,6 +238,7 @@ public class InterceptingClientHttpRequestFactoryTests {
|
||||
|
||||
}
|
||||
|
||||
|
||||
private class RequestMock implements ClientHttpRequest {
|
||||
|
||||
private URI uri;
|
||||
@@ -291,6 +289,7 @@ public class InterceptingClientHttpRequestFactoryTests {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static class ResponseMock implements ClientHttpResponse {
|
||||
|
||||
private HttpStatus statusCode = HttpStatus.OK;
|
||||
@@ -328,4 +327,5 @@ public class InterceptingClientHttpRequestFactoryTests {
|
||||
public void close() {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user