package org.jboss.resteasy.client.jaxrs.engines; import org.apache.http.HttpHost; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.Configurable; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.protocol.HttpContext; import org.jboss.resteasy.client.jaxrs.internal.ClientInvocation; /** * An Apache HTTP engine for use with the new Builder Config style. * To accommodate the configuration style this class overrides the methods that get/set from the old Parameters * Otherwise only the old style parameters will get picked up. * * Consider using the factory ApacheHttpClient4EngineFactory instead of using this class directly */ public class ApacheHttpClient43Engine extends ApacheHttpClient4Engine { public ApacheHttpClient43Engine() { super(); } public ApacheHttpClient43Engine(final HttpHost defaultProxy) { super(defaultProxy); } public ApacheHttpClient43Engine(final HttpClient httpClient) { super(httpClient); } public ApacheHttpClient43Engine(final HttpClient httpClient, final boolean closeHttpClient) { super(httpClient, closeHttpClient); } public ApacheHttpClient43Engine(final HttpClient httpClient, final HttpContext httpContext) { super(httpClient, httpContext); } @Override protected HttpClient createDefaultHttpClient() { final HttpClientBuilder builder = HttpClientBuilder.create(); RequestConfig.Builder requestBuilder = RequestConfig.custom(); if(defaultProxy != null) { requestBuilder.setProxy(defaultProxy); } builder.disableContentCompression(); builder.setDefaultRequestConfig(requestBuilder.build()); return builder.build(); } @Override public HttpHost getDefaultProxy() { Configurable clientConfiguration = (Configurable) httpClient; return clientConfiguration.getConfig().getProxy(); } @Override protected void setRedirectRequired(final ClientInvocation request, final HttpRequestBase httpMethod) { RequestConfig.Builder requestBuilder = RequestConfig.copy(getCurrentConfiguration(request, httpMethod)); requestBuilder.setRedirectsEnabled(true); httpMethod.setConfig(requestBuilder.build()); } @Override protected void setRedirectNotRequired(final ClientInvocation request, final HttpRequestBase httpMethod) { RequestConfig.Builder requestBuilder = RequestConfig.copy(getCurrentConfiguration(request, httpMethod)); requestBuilder.setRedirectsEnabled(false); httpMethod.setConfig(requestBuilder.build()); } private RequestConfig getCurrentConfiguration(final ClientInvocation request, final HttpRequestBase httpMethod) { RequestConfig baseConfig; if (httpMethod != null && httpMethod.getConfig() != null) { baseConfig = httpMethod.getConfig(); } else { ApacheHttpClient43Engine engine = ((ApacheHttpClient43Engine)request.getClient().httpEngine()); baseConfig = ((Configurable)engine.getHttpClient()).getConfig(); if (baseConfig == null) { Configurable clientConfiguration = (Configurable) httpClient; baseConfig = clientConfiguration.getConfig(); } } return baseConfig; } }