-
Notifications
You must be signed in to change notification settings - Fork 38.7k
Closed
Labels
in: webIssues in web modules (web, webmvc, webflux, websocket)Issues in web modules (web, webmvc, webflux, websocket)type: enhancementA general enhancementA general enhancement
Milestone
Description
spring-web 5.1.3.RELEASE:
The org.springframework.web.client.HttpMessageConverterExtractor#extractData
results in a NullPointerException if:
- The HttpStatus of the
org.springframework.http.client.ClientHttpResponse
is 401 - The
org.springframework.http.client.ClientHttpResponse#getBody
isnull
. - The response does not contain a
content-length
header.
The following test can be added to org.springframework.web.client.HttpMessageConverterExtractorTest
to verify this behaviour:
@Test
public void missingContentLengthHeader() throws IOException {
HttpMessageConverter<?> converter = mock(HttpMessageConverter.class);
HttpHeaders responseHeaders = new HttpHeaders();
extractor = new HttpMessageConverterExtractor<>(String.class, createConverterList(converter));
given(response.getRawStatusCode()).willReturn(HttpStatus.valueOf(401).value());
given(response.getHeaders()).willReturn(responseHeaders);
Object result = extractor.extractData(response);
assertNull(result);
}
The org.springframework.web.client.MessageBodyClientHttpResponseWrapper#hasMessageBody
incorrectly returns true
which causes org.springframework.web.client.MessageBodyClientHttpResponseWrapper#hasEmptyMessageBody
to throw the NPE.
public T extractData(ClientHttpResponse response) throws IOException {
...
if (!responseWrapper.hasMessageBody() || responseWrapper.hasEmptyMessageBody()) {
...
This can be fixed in org.springframework.web.client.MessageBodyClientHttpResponseWrapper#hasMessageBody
by changing this:
if (getHeaders().getContentLength() == 0) {
return false;
}
to this:
if (getHeaders().getContentLength() <= 0) {
return false;
}
When the headers do not contain a content-length header, getHeaders().getContentLength()
returns -1
.
Metadata
Metadata
Assignees
Labels
in: webIssues in web modules (web, webmvc, webflux, websocket)Issues in web modules (web, webmvc, webflux, websocket)type: enhancementA general enhancementA general enhancement