Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit a7f1524

Browse files
committedDec 23, 2024·
Fix NullPointerException in HttpComponentsClientHttpResponse
Closes spring-projectsgh-34132
1 parent 5ce5647 commit a7f1524

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed
 

‎spring-web/src/main/java/org/springframework/http/client/reactive/HttpComponentsClientHttpResponse.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,11 @@ private static MultiValueMap<String, ResponseCookie> adaptCookies(
7070
LinkedMultiValueMap<String, ResponseCookie> result = new LinkedMultiValueMap<>();
7171

7272
CookieSpec cookieSpec = context.getCookieSpec();
73-
CookieOrigin cookieOrigin = context.getCookieOrigin();
73+
if (cookieSpec == null) {
74+
return result;
75+
}
7476

77+
CookieOrigin cookieOrigin = context.getCookieOrigin();
7578
Iterator<Header> itr = response.headerIterator(HttpHeaders.SET_COOKIE);
7679
while (itr.hasNext()) {
7780
Header header = itr.next();

‎spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java

+25
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,11 @@
3939
import okhttp3.mockwebserver.MockWebServer;
4040
import okhttp3.mockwebserver.RecordedRequest;
4141
import okio.Buffer;
42+
import org.apache.hc.client5.http.impl.async.HttpAsyncClientBuilder;
4243
import org.junit.jupiter.api.AfterEach;
4344
import org.junit.jupiter.api.BeforeEach;
4445
import org.junit.jupiter.api.Named;
46+
import org.junit.jupiter.api.Test;
4547
import org.junit.jupiter.params.ParameterizedTest;
4648
import org.junit.jupiter.params.provider.Arguments;
4749
import org.junit.jupiter.params.provider.MethodSource;
@@ -64,6 +66,7 @@
6466
* Tests for {@link ClientHttpConnector} implementations.
6567
* @author Arjen Poutsma
6668
* @author Brian Clozel
69+
* @author Sebastien Deleuze
6770
*/
6871
class ClientHttpConnectorTests {
6972

@@ -198,6 +201,28 @@ void cookieExpireValueSetAsMaxAge(ClientHttpConnector connector) {
198201
.verifyComplete();
199202
}
200203

204+
@Test
205+
void noCookieWithHttpComponents() {
206+
ClientHttpConnector connector = new HttpComponentsClientHttpConnector(
207+
HttpAsyncClientBuilder.create().disableCookieManagement().build()
208+
);
209+
210+
prepareResponse(response -> {
211+
response.setResponseCode(200);
212+
response.addHeader("Set-Cookie", "id=test;");
213+
});
214+
Mono<ClientHttpResponse> futureResponse =
215+
connector.connect(HttpMethod.GET, this.server.url("/").uri(), ReactiveHttpOutputMessage::setComplete);
216+
StepVerifier.create(futureResponse)
217+
.assertNext(response -> {
218+
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
219+
assertThat(response.getCookies()).isEmpty();
220+
}
221+
)
222+
.verifyComplete();
223+
224+
}
225+
201226
private Buffer randomBody(int size) {
202227
Buffer responseBody = new Buffer();
203228
Random rnd = new Random();

0 commit comments

Comments
 (0)
Please sign in to comment.