From 85ad5aa1ef3c1009ba297f3f40ef82422e3c8a2e Mon Sep 17 00:00:00 2001 From: Colm O hEigeartaigh Date: Wed, 17 Jul 2019 21:22:16 +0100 Subject: [PATCH] Update HTTPClient and replace deprecated calls --- .../discovery/http/HTTPDiscoveryAgent.java | 4 +- .../transport/http/HttpClientTransport.java | 49 +++++++-------- .../transport/https/HttpsClientTransport.java | 28 ++++----- .../HttpClientTransportCookiePolicyTest.java | 61 ------------------- .../spi/ClassLoaderSPIConnectionFactory.java | 4 +- pom.xml | 4 +- 6 files changed, 43 insertions(+), 107 deletions(-) delete mode 100644 activemq-http/src/test/java/org/apache/activemq/transport/http/HttpClientTransportCookiePolicyTest.java diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/discovery/http/HTTPDiscoveryAgent.java b/activemq-http/src/main/java/org/apache/activemq/transport/discovery/http/HTTPDiscoveryAgent.java index 897a279e98..15f4de6220 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/discovery/http/HTTPDiscoveryAgent.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/discovery/http/HTTPDiscoveryAgent.java @@ -38,7 +38,7 @@ import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPut; import org.apache.http.impl.client.BasicResponseHandler; -import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,7 +53,7 @@ public class HTTPDiscoveryAgent implements DiscoveryAgent, Suspendable { private static final Logger LOG = LoggerFactory.getLogger(HTTPDiscoveryAgent.class); private String registryURL = "http://localhost:8080/discovery-registry/default"; - private HttpClient httpClient = new DefaultHttpClient(); + private HttpClient httpClient = HttpClientBuilder.create().build(); private AtomicBoolean running = new AtomicBoolean(); private final AtomicReference discoveryListener = new AtomicReference(); private final HashSet registeredServices = new HashSet(); diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java b/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java index 2480daae22..479f8c05ac 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/http/HttpClientTransport.java @@ -40,26 +40,23 @@ import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; import org.apache.http.client.HttpClient; import org.apache.http.client.HttpResponseException; import org.apache.http.client.ResponseHandler; +import org.apache.http.client.config.CookieSpecs; +import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpHead; import org.apache.http.client.methods.HttpOptions; import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.params.CookiePolicy; -import org.apache.http.client.params.HttpClientParams; -import org.apache.http.conn.ClientConnectionManager; -import org.apache.http.conn.params.ConnRoutePNames; -import org.apache.http.conn.scheme.PlainSocketFactory; -import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.HttpClientConnectionManager; import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.BasicResponseHandler; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.conn.PoolingClientConnectionManager; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.AbstractHttpMessage; -import org.apache.http.params.HttpConnectionParams; -import org.apache.http.params.HttpParams; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; @@ -317,9 +314,10 @@ public class HttpClientTransport extends HttpTransportSupport { } protected HttpClient createHttpClient() { - DefaultHttpClient client = new DefaultHttpClient(createClientConnectionManager()); + HttpClientBuilder clientBuilder = HttpClientBuilder.create(); + clientBuilder.setConnectionManager(createClientConnectionManager()); if (useCompression) { - client.addRequestInterceptor( new HttpRequestInterceptor() { + clientBuilder.addInterceptorLast(new HttpRequestInterceptor() { @Override public void process(HttpRequest request, HttpContext context) { // We expect to received a compression response that we un-gzip @@ -327,31 +325,30 @@ public class HttpClientTransport extends HttpTransportSupport { } }); } + + RequestConfig.Builder requestConfigBuilder = RequestConfig.custom(); if (getProxyHost() != null) { HttpHost proxy = new HttpHost(getProxyHost(), getProxyPort()); - client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); + requestConfigBuilder.setProxy(proxy); - if (client.getConnectionManager().getSchemeRegistry().get("http") == null) { - client.getConnectionManager().getSchemeRegistry().register( - new Scheme("http", getProxyPort(), PlainSocketFactory.getSocketFactory())); - } - - if(getProxyUser() != null && getProxyPassword() != null) { - client.getCredentialsProvider().setCredentials( + if (getProxyUser() != null && getProxyPassword() != null) { + CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials( new AuthScope(getProxyHost(), getProxyPort()), new UsernamePasswordCredentials(getProxyUser(), getProxyPassword())); + clientBuilder.setDefaultCredentialsProvider(credentialsProvider); } } - HttpParams params = client.getParams(); - HttpConnectionParams.setSoTimeout(params, soTimeout); - HttpClientParams.setCookiePolicy(params, CookiePolicy.BROWSER_COMPATIBILITY); + requestConfigBuilder.setSocketTimeout(soTimeout); + requestConfigBuilder.setCookieSpec(CookieSpecs.DEFAULT); + clientBuilder.setDefaultRequestConfig(requestConfigBuilder.build()); - return client; + return clientBuilder.build(); } - protected ClientConnectionManager createClientConnectionManager() { - return new PoolingClientConnectionManager(); + protected HttpClientConnectionManager createClientConnectionManager() { + return new PoolingHttpClientConnectionManager(); } protected void configureMethod(AbstractHttpMessage method) { diff --git a/activemq-http/src/main/java/org/apache/activemq/transport/https/HttpsClientTransport.java b/activemq-http/src/main/java/org/apache/activemq/transport/https/HttpsClientTransport.java index 2e432fcaf1..9f6774a671 100644 --- a/activemq-http/src/main/java/org/apache/activemq/transport/https/HttpsClientTransport.java +++ b/activemq-http/src/main/java/org/apache/activemq/transport/https/HttpsClientTransport.java @@ -24,11 +24,13 @@ import org.apache.activemq.broker.SslContext; import org.apache.activemq.transport.http.HttpClientTransport; import org.apache.activemq.transport.util.TextWireFormat; import org.apache.activemq.util.IOExceptionSupport; -import org.apache.http.conn.ClientConnectionManager; -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.conn.PoolingClientConnectionManager; +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.ssl.DefaultHostnameVerifier; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; public class HttpsClientTransport extends HttpClientTransport { @@ -37,19 +39,17 @@ public class HttpsClientTransport extends HttpClientTransport { } @Override - protected ClientConnectionManager createClientConnectionManager() { - PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager(createSchemeRegistry()); - return connectionManager; + protected HttpClientConnectionManager createClientConnectionManager() { + return new PoolingHttpClientConnectionManager(createRegistry()); } - private SchemeRegistry createSchemeRegistry() { + private Registry createRegistry() { - SchemeRegistry schemeRegistry = new SchemeRegistry(); + RegistryBuilder registryBuilder = RegistryBuilder.create(); try { - SSLSocketFactory sslSocketFactory = new SSLSocketFactory(createSocketFactory(), - SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); - schemeRegistry.register(new Scheme("https", getRemoteUrl().getPort(), sslSocketFactory)); - return schemeRegistry; + SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(createSocketFactory(), new DefaultHostnameVerifier()); + registryBuilder.register("https", sslConnectionFactory); + return registryBuilder.build(); } catch (Exception e) { throw new IllegalStateException("Failure trying to create scheme registry", e); } diff --git a/activemq-http/src/test/java/org/apache/activemq/transport/http/HttpClientTransportCookiePolicyTest.java b/activemq-http/src/test/java/org/apache/activemq/transport/http/HttpClientTransportCookiePolicyTest.java deleted file mode 100644 index b0f5691682..0000000000 --- a/activemq-http/src/test/java/org/apache/activemq/transport/http/HttpClientTransportCookiePolicyTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.activemq.transport.http; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; - -import java.net.URI; -import java.net.URISyntaxException; - -import org.apache.activemq.transport.util.TextWireFormat; -import org.apache.http.client.HttpClient; -import org.apache.http.client.params.HttpClientParams; -import org.junit.Before; -import org.junit.Test; - -/** - * Test that {@link HttpClientTransport} sets a broad-range compatibility - * cookie policy. - * - * @see AMQ-6571: HttpClientTransport refuses to accept cookies using `Expires' header - */ -@SuppressWarnings("deprecation") -public class HttpClientTransportCookiePolicyTest { - - private HttpClientTransport transport; - - - /** - * Create the transport so we can inspect it. - * @throws URISyntaxException if something goes wrong. - */ - @Before - public void setUp() throws URISyntaxException { - transport = new HttpClientTransport(mock(TextWireFormat.class), new URI("http://localhost:8080/test")); - } - - - /** - * Create a new connection and check the connection properties. - */ - @Test - public void test() { - HttpClient client = transport.createHttpClient(); - assertEquals("Cookie spec", org.apache.http.client.params.CookiePolicy.BROWSER_COMPATIBILITY, HttpClientParams.getCookiePolicy(client.getParams())); - } -} diff --git a/activemq-tooling/activemq-perf-maven-plugin/src/main/java/org/apache/activemq/tool/spi/ClassLoaderSPIConnectionFactory.java b/activemq-tooling/activemq-perf-maven-plugin/src/main/java/org/apache/activemq/tool/spi/ClassLoaderSPIConnectionFactory.java index 8b84798074..17ce87f42d 100644 --- a/activemq-tooling/activemq-perf-maven-plugin/src/main/java/org/apache/activemq/tool/spi/ClassLoaderSPIConnectionFactory.java +++ b/activemq-tooling/activemq-perf-maven-plugin/src/main/java/org/apache/activemq/tool/spi/ClassLoaderSPIConnectionFactory.java @@ -57,14 +57,14 @@ public abstract class ClassLoaderSPIConnectionFactory implements SPIConnectionFa } else { LOG.info("Adding extension dir: " + f.getAbsolutePath()); - urls.add(f.toURL()); + urls.add(f.toURI().toURL()); File[] files = f.listFiles(); if (files != null) { for (int j = 0; j < files.length; j++) { if (files[j].getName().endsWith(".zip") || files[j].getName().endsWith(".jar")) { LOG.info("Adding extension dir: " + files[j].getAbsolutePath()); - urls.add(files[j].toURL()); + urls.add(files[j].toURI().toURL()); } } } diff --git a/pom.xml b/pom.xml index d76ff68f4a..1049147015 100644 --- a/pom.xml +++ b/pom.xml @@ -69,8 +69,8 @@ 1.22 0.1.8 1.8.0.12 - 4.5.6 - 4.4.10 + 4.5.9 + 4.4.11 1.2.0.Beta4 2.9.9 2.9.9.1