Affects: 5.3.20


httpclient was last updated on Oct 06 2020 and was superseded by httpclient5 which is being actively maintained.

See the upgrade guide here.

The HttpComponentsClientHttpRequestFactory class relies on httpclient and is not compatible with httpclient5. As httpclient version 4 is no longer supported it would be good to have RequestFactory support for version 5.

Comment From: bclozel

httpclient5 support was introduced in #24700 for WebClient. While RestTemplate is in maintenance mode as of #24503, shipping a outdated integration with httpclient might be problematic in the 6.0 line. Something we should consider for 6.0 maybe. I'll mark this for team discussion.

Comment From: rasikaAjoshi23

Hi @bclozel,

I was investigating this issue, and I have an idea through which we can support both httpclient4 and httpclient5. We can create a counterpart of the HttpComponentsClientHttpRequestFactory class that uses httpclient5. We can probably name that class as HttpComponentsClient5HttpRequestFactory. If it's okay with the team then I can raise a PR as well.

Comment From: bclozel

We've discussed this as a team and we decided to migrate the existing ClientHttpRequestFactory to using the new httpclient5 artifact in Spring Framework 6.0.0. We'll leave the existing arrangement in place in the 5.3.x line. We'll need to make it a noteworthy comment in our release notes, as this will be a new baseline requirement for Spring Framework 6.0.

Comment From: OndraZizka

Not directly related, but: I can't persuade httpclient 4.x not to spam the log with DEBUG messages, and no logging configuration seems to help. I could configure httpclient 5 to stop spamming, as it uses SLF4J. Any hints?

Comment From: billNaylor

@pwhittlesea It seems the link you give under 'here' has gone away, can it now be replaced with: https://hc.apache.org/httpcomponents-client-5.2.x/migration-guide/preparation.html (if this is what you mean?)?

Comment From: makewheels

I dont know how to update httpclient from 4 to 5, HttpComponentsClientHttpRequestFactory

Comment From: bclozel

@makewheels please ask a question on StackOverflow.

Comment From: glorinli

https://github.com/spring-projects/spring-framework/blob/main/spring-web/src/main/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.java

HttpComponentsClientHttpRequestFactory receives classic.HttpClient but I can only create org.apache.http.impl.client.CloseableHttpClient

So I am also unable to create RestTemplate based on httpclient5.

Comment From: bclozel

You will need to upgrade your library to version 5. See https://hc.apache.org/httpcomponents-client-5.4.x/current/httpclient5/apidocs/org/apache/hc/client5/http/impl/classic/CloseableHttpClient.html