Hi all,

I have a technical problem as well as a related documentation issue to
report. The technical problem is as follows:

HttpComponents 4.x provides a facility to use a HttpContext for a given
request by calling HttpClient.execute(HttpUriRequest, HttpContext), but it
looks like the http4 Camel Component doesn't have hooks to use this.
Looking at the latest source
of org.apache.camel.component.http4.HttpProducer, I only see one way of
calling HttpClient.execute():

    protected HttpResponse executeMethod(HttpUriRequest httpRequest) throws
> IOException {
>         return httpClient.execute(httpRequest);
>     }


Perhaps this could be made available in a similar fashion
to HttpClientConfigurer? (for example creating a HttpContextConfigurer)

My particular symptom is that I'm unable to force the http4 component to
use preemptive authentication, which relies on HttpContext in HttpClient
4.x. In HttpClient 3.x, this was made possible by the HttpClientParams flag
"authenticationPreemptive". However, it appears that this was removed for
4.x in favor of using HttpContext because of security concerns.

The documentation issue is that the http4 Component docs claim that the
httpClient.authenticationPreemptive=true flag will work the same way it
does for the http Component, but it does not. I saw the following error
when I tried to do so:

Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to
> resolve endpoint:
> https4://<my_endpoint>?httpClient.authenticationPreemptive=true&httpClientConfigurer=myHttpClientConfigurer
>  due
> to: There are 1 parameters that couldn't be set on the endpoint. Check the
> uri if the parameters are spelt correctly and that they are properties of
> the endpoint. Unknown parameters=[{authenticationPreemptive=true}]


So it looks to me like the http4 Component should be updated to support
setting a HttpContext for requests and the documentation should also be
updated to reflect this change between HttpClient 3.x and 4.x.

Thanks,
Jeff

Reply via email to