Closed
Description
Stéphane Nicoll opened SPR-11981 and commented
HttpComponentsClientHttpRequestFactory
is supposed to handle features in a similar manner as SimpleClientHttpRequestFactory
but it does not support RequestCallback
when the bufferRequestBody
is disabled.
Consider the following code
// Create the HttpComponentsClientHttpRequestFactory
SimpleClientHttpRequestFactory preconfiguredHTTPInstance = new SimpleClientHttpRequestFactory();
// Set BufferRequestBody as false, default is true.
preconfiguredHTTPInstance.setBufferRequestBody(false);
RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(preconfiguredHTTPInstance);
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
RequestCallback requestCallback = new RequestCallback() {
@Override
public void doWithRequest(ClientHttpRequest request) throws IOException {
IOUtils.copy(content.getInputStream(), request.getBody());
}
};
HttpMessageConverterExtractor<String> responseExtractor =
new HttpMessageConverterExtractor<String>(String.class, restTemplate.getMessageConverters());
return restTemplate.execute(url, HttpMethod.POST, requestCallback, responseExtractor)
Switching to HttpComponentsClientHttpRequestFactory
leads to UnsupportedOperationException("getBody not supported")
Affects: 4.0.6
Issue Links:
- Upgrade HttpComponentsHttpInvokerRequestExecutor to require Apache HttpComponents 4.3 [SPR-11113] #15739 Upgrade HttpComponentsHttpInvokerRequestExecutor to require Apache HttpComponents 4.3
- HttpComponentsClientHttpRequestFactory.setBufferRequestBody(false) does not stop OutOfMemoryError [SPR-11977] #16593 HttpComponentsClientHttpRequestFactory.setBufferRequestBody(false) does not stop OutOfMemoryError
2 votes, 5 watchers