You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by ve...@apache.org on 2017/01/28 14:19:17 UTC
svn commit: r1780692 - in /axis/axis2/java/core/trunk:
modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/
src/site/markdown/release-notes/
Author: veithen
Date: Sat Jan 28 14:19:17 2017
New Revision: 1780692
URL: http://svn.apache.org/viewvc?rev=1780692&view=rev
Log:
Completely upgrade to the APIs supported by the latest HTTPClient 4.x version.
Modified:
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java
axis/axis2/java/core/trunk/src/site/markdown/release-notes/1.8.0.md
Modified: axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java?rev=1780692&r1=1780691&r2=1780692&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java (original)
+++ axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java Sat Jan 28 14:19:17 2017
@@ -33,8 +33,12 @@ import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.NTCredentials;
import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.AbstractHttpClient;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.CloseableHttpClient;
import javax.xml.namespace.QName;
import java.net.URL;
@@ -57,12 +61,14 @@ public class HTTPProxyConfigurator {
*
* @param messageContext
* in message context for
- * @param httpClient
- * instance
+ * @param requestConfig
+ * the request configuration to fill in
+ * @param clientContext
+ * the HTTP client context
* @throws org.apache.axis2.AxisFault
* if Proxy settings are invalid
*/
- public static void configure(MessageContext messageContext, AbstractHttpClient httpClient, RequestConfig.Builder requestConfig)
+ public static void configure(MessageContext messageContext, RequestConfig.Builder requestConfig, HttpClientContext clientContext)
throws AxisFault {
Credentials proxyCredentials = null;
@@ -142,8 +148,12 @@ public class HTTPProxyConfigurator {
if (proxyCredentials != null) {
// TODO : Set preemptive authentication, but its not recommended in HC 4
requestConfig.setAuthenticationEnabled(true);
-
- httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY, proxyCredentials);
+ CredentialsProvider credsProvider = clientContext.getCredentialsProvider();
+ if (credsProvider == null) {
+ credsProvider = new BasicCredentialsProvider();
+ clientContext.setCredentialsProvider(credsProvider);
+ }
+ credsProvider.setCredentials(AuthScope.ANY, proxyCredentials);
HttpHost proxy = new HttpHost(proxyHost, proxyPort);
requestConfig.setProxy(proxy);
Modified: axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java?rev=1780692&r1=1780691&r2=1780692&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java Sat Jan 28 14:19:17 2017
@@ -28,15 +28,15 @@ import org.apache.axis2.transport.http.H
import org.apache.axis2.transport.http.Request;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.http.client.params.AuthPolicy;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.scheme.PlainSocketFactory;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.impl.client.AbstractHttpClient;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.conn.PoolingClientConnectionManager;
+import org.apache.http.client.HttpClient;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.HttpClientConnectionManager;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import java.net.URL;
@@ -50,14 +50,14 @@ public class HTTPSenderImpl extends HTTP
return new RequestImpl(getHttpClient(msgContext), msgContext, methodName, url, requestEntity);
}
- private AbstractHttpClient getHttpClient(MessageContext msgContext) {
+ private HttpClient getHttpClient(MessageContext msgContext) {
ConfigurationContext configContext = msgContext.getConfigurationContext();
- AbstractHttpClient httpClient = (AbstractHttpClient) msgContext
+ HttpClient httpClient = (HttpClient) msgContext
.getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
if (httpClient == null) {
- httpClient = (AbstractHttpClient) configContext.
+ httpClient = (HttpClient) configContext.
getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
}
@@ -66,11 +66,11 @@ public class HTTPSenderImpl extends HTTP
}
synchronized (this) {
- httpClient = (AbstractHttpClient) msgContext.
+ httpClient = (HttpClient) msgContext.
getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
if (httpClient == null) {
- httpClient = (AbstractHttpClient) configContext
+ httpClient = (HttpClient) configContext
.getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
}
@@ -78,28 +78,27 @@ public class HTTPSenderImpl extends HTTP
return httpClient;
}
- ClientConnectionManager connManager = (ClientConnectionManager) msgContext
+ HttpClientConnectionManager connManager = (HttpClientConnectionManager) msgContext
.getProperty(HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
if (connManager == null) {
- connManager = (ClientConnectionManager) msgContext
+ connManager = (HttpClientConnectionManager) msgContext
.getProperty(HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
}
if (connManager == null) {
// reuse HttpConnectionManager
synchronized (configContext) {
- connManager = (ClientConnectionManager) configContext
+ connManager = (HttpClientConnectionManager) configContext
.getProperty(HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
if (connManager == null) {
log.trace("Making new ConnectionManager");
- SchemeRegistry schemeRegistry = new SchemeRegistry();
- schemeRegistry.register(
- new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
- schemeRegistry.register(
- new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));
-
- connManager = new PoolingClientConnectionManager(schemeRegistry);
- ((PoolingClientConnectionManager)connManager).setMaxTotal(200);
- ((PoolingClientConnectionManager)connManager).setDefaultMaxPerRoute(200);
+ Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+ .register("http", PlainConnectionSocketFactory.getSocketFactory())
+ .register("https", SSLConnectionSocketFactory.getSocketFactory())
+ .build();
+
+ connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+ ((PoolingHttpClientConnectionManager)connManager).setMaxTotal(200);
+ ((PoolingHttpClientConnectionManager)connManager).setDefaultMaxPerRoute(200);
configContext.setProperty(
HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER, connManager);
}
@@ -109,12 +108,10 @@ public class HTTPSenderImpl extends HTTP
* Create a new instance of HttpClient since the way it is used here
* it's not fully thread-safe.
*/
- httpClient = new DefaultHttpClient(connManager);
-
- //We don't need to set timeout for connection manager, since we are doing it below
- // and its enough
-
- return httpClient;
+ return HttpClientBuilder.create()
+ .setConnectionManager(connManager)
+ .setConnectionManagerShared(true)
+ .build();
}
}
Modified: axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java?rev=1780692&r1=1780691&r2=1780692&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java Sat Jan 28 14:19:17 2017
@@ -46,14 +46,14 @@ import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.NTCredentials;
import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.params.AuthPolicy;
-import org.apache.http.impl.auth.NTLMSchemeFactory;
-import org.apache.http.impl.client.AbstractHttpClient;
-import org.apache.http.protocol.BasicHttpContext;
-import org.apache.http.protocol.HttpContext;
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.util.EntityUtils;
final class RequestImpl implements Request {
@@ -61,15 +61,16 @@ final class RequestImpl implements Reque
private static final Log log = LogFactory.getLog(RequestImpl.class);
- private final AbstractHttpClient httpClient;
+ private final HttpClient httpClient;
private final MessageContext msgContext;
private final URL url;
private final HttpRequestBase method;
private final HttpHost httpHost;
private final RequestConfig.Builder requestConfig = RequestConfig.custom();
+ private final HttpClientContext clientContext = HttpClientContext.create();
private HttpResponse response;
- RequestImpl(AbstractHttpClient httpClient, MessageContext msgContext, final String methodName, URL url,
+ RequestImpl(HttpClient httpClient, MessageContext msgContext, final String methodName, URL url,
AxisRequestEntity requestEntity) throws AxisFault {
this.httpClient = httpClient;
this.msgContext = msgContext;
@@ -206,9 +207,7 @@ final class RequestImpl implements Reque
method.setConfig(requestConfig.build());
- HttpContext localContext = new BasicHttpContext();
- // Why do we have add context here
- response = httpClient.execute(httpHost, method, localContext);
+ response = httpClient.execute(httpHost, method, clientContext);
}
@Override
@@ -238,7 +237,7 @@ final class RequestImpl implements Reque
if (log.isDebugEnabled()) {
log.debug("Configuring HTTP proxy.");
}
- HTTPProxyConfigurator.configure(msgContext, httpClient, requestConfig);
+ HTTPProxyConfigurator.configure(msgContext, requestConfig, clientContext);
}
}
@@ -263,35 +262,35 @@ final class RequestImpl implements Reque
// TODO : Set preemptive authentication, but its not recommended in HC 4
+ CredentialsProvider credsProvider = clientContext.getCredentialsProvider();
+ if (credsProvider == null) {
+ credsProvider = new BasicCredentialsProvider();
+ clientContext.setCredentialsProvider(credsProvider);
+ }
if (host != null) {
if (domain != null) {
/* Credentials for NTLM Authentication */
- httpClient.getAuthSchemes().register("ntlm",new NTLMSchemeFactory());
creds = new NTCredentials(username, password, host, domain);
} else {
/* Credentials for Digest and Basic Authentication */
creds = new UsernamePasswordCredentials(username, password);
}
- httpClient.getCredentialsProvider().
- setCredentials(new AuthScope(host, port, realm), creds);
+ credsProvider.setCredentials(new AuthScope(host, port, realm), creds);
} else {
if (domain != null) {
/*
* Credentials for NTLM Authentication when host is
* ANY_HOST
*/
- httpClient.getAuthSchemes().register("ntlm",new NTLMSchemeFactory());
creds = new NTCredentials(username, password, AuthScope.ANY_HOST, domain);
- httpClient.getCredentialsProvider().
- setCredentials(new AuthScope(AuthScope.ANY_HOST, port, realm),
- creds);
+ credsProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, port, realm), creds);
} else {
/* Credentials only for Digest and Basic Authentication */
creds = new UsernamePasswordCredentials(username, password);
- httpClient.getCredentialsProvider().
- setCredentials(new AuthScope(AuthScope.ANY), creds);
+ credsProvider.setCredentials(new AuthScope(AuthScope.ANY), creds);
}
}
+
/* Customizing the priority Order */
List schemes = authenticator.getAuthSchemes();
if (schemes != null && schemes.size() > 0) {
Modified: axis/axis2/java/core/trunk/src/site/markdown/release-notes/1.8.0.md
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/src/site/markdown/release-notes/1.8.0.md?rev=1780692&r1=1780691&r2=1780692&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/src/site/markdown/release-notes/1.8.0.md (original)
+++ axis/axis2/java/core/trunk/src/site/markdown/release-notes/1.8.0.md Sat Jan 28 14:19:17 2017
@@ -6,3 +6,6 @@ Apache Axis2 1.8.0 Release Note
* The Apache Commons HttpClient 3.x based HTTP transport has been deprecated.
If you wish to continue using this transport, add `axis2-transport-http-hc3`
to your project.
+
+* The HTTPClient 4.x based transport has been upgraded to use the APIs supported
+ by the latest HTTPClient version.