mirror of https://github.com/apache/activemq.git
Merge pull request #376 from coheigea/httpclient
Update HTTPClient and replace deprecated calls
This commit is contained in:
commit
3ab1115e9f
|
@ -38,7 +38,7 @@ import org.apache.http.client.methods.HttpDelete;
|
||||||
import org.apache.http.client.methods.HttpGet;
|
import org.apache.http.client.methods.HttpGet;
|
||||||
import org.apache.http.client.methods.HttpPut;
|
import org.apache.http.client.methods.HttpPut;
|
||||||
import org.apache.http.impl.client.BasicResponseHandler;
|
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.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ public class HTTPDiscoveryAgent implements DiscoveryAgent, Suspendable {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(HTTPDiscoveryAgent.class);
|
private static final Logger LOG = LoggerFactory.getLogger(HTTPDiscoveryAgent.class);
|
||||||
|
|
||||||
private String registryURL = "http://localhost:8080/discovery-registry/default";
|
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 AtomicBoolean running = new AtomicBoolean();
|
||||||
private final AtomicReference<DiscoveryListener> discoveryListener = new AtomicReference<DiscoveryListener>();
|
private final AtomicReference<DiscoveryListener> discoveryListener = new AtomicReference<DiscoveryListener>();
|
||||||
private final HashSet<String> registeredServices = new HashSet<String>();
|
private final HashSet<String> registeredServices = new HashSet<String>();
|
||||||
|
|
|
@ -40,26 +40,23 @@ import org.apache.http.HttpResponse;
|
||||||
import org.apache.http.HttpStatus;
|
import org.apache.http.HttpStatus;
|
||||||
import org.apache.http.auth.AuthScope;
|
import org.apache.http.auth.AuthScope;
|
||||||
import org.apache.http.auth.UsernamePasswordCredentials;
|
import org.apache.http.auth.UsernamePasswordCredentials;
|
||||||
|
import org.apache.http.client.CredentialsProvider;
|
||||||
import org.apache.http.client.HttpClient;
|
import org.apache.http.client.HttpClient;
|
||||||
import org.apache.http.client.HttpResponseException;
|
import org.apache.http.client.HttpResponseException;
|
||||||
import org.apache.http.client.ResponseHandler;
|
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.HttpGet;
|
||||||
import org.apache.http.client.methods.HttpHead;
|
import org.apache.http.client.methods.HttpHead;
|
||||||
import org.apache.http.client.methods.HttpOptions;
|
import org.apache.http.client.methods.HttpOptions;
|
||||||
import org.apache.http.client.methods.HttpPost;
|
import org.apache.http.client.methods.HttpPost;
|
||||||
import org.apache.http.client.params.CookiePolicy;
|
import org.apache.http.conn.HttpClientConnectionManager;
|
||||||
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.entity.ByteArrayEntity;
|
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.BasicResponseHandler;
|
||||||
import org.apache.http.impl.client.DefaultHttpClient;
|
import org.apache.http.impl.client.HttpClientBuilder;
|
||||||
import org.apache.http.impl.conn.PoolingClientConnectionManager;
|
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||||||
import org.apache.http.message.AbstractHttpMessage;
|
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.protocol.HttpContext;
|
||||||
import org.apache.http.util.EntityUtils;
|
import org.apache.http.util.EntityUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -317,9 +314,10 @@ public class HttpClientTransport extends HttpTransportSupport {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected HttpClient createHttpClient() {
|
protected HttpClient createHttpClient() {
|
||||||
DefaultHttpClient client = new DefaultHttpClient(createClientConnectionManager());
|
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
|
||||||
|
clientBuilder.setConnectionManager(createClientConnectionManager());
|
||||||
if (useCompression) {
|
if (useCompression) {
|
||||||
client.addRequestInterceptor( new HttpRequestInterceptor() {
|
clientBuilder.addInterceptorLast(new HttpRequestInterceptor() {
|
||||||
@Override
|
@Override
|
||||||
public void process(HttpRequest request, HttpContext context) {
|
public void process(HttpRequest request, HttpContext context) {
|
||||||
// We expect to received a compression response that we un-gzip
|
// 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) {
|
if (getProxyHost() != null) {
|
||||||
HttpHost proxy = new HttpHost(getProxyHost(), getProxyPort());
|
HttpHost proxy = new HttpHost(getProxyHost(), getProxyPort());
|
||||||
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
|
requestConfigBuilder.setProxy(proxy);
|
||||||
|
|
||||||
if (client.getConnectionManager().getSchemeRegistry().get("http") == null) {
|
if (getProxyUser() != null && getProxyPassword() != null) {
|
||||||
client.getConnectionManager().getSchemeRegistry().register(
|
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
|
||||||
new Scheme("http", getProxyPort(), PlainSocketFactory.getSocketFactory()));
|
credentialsProvider.setCredentials(
|
||||||
}
|
|
||||||
|
|
||||||
if(getProxyUser() != null && getProxyPassword() != null) {
|
|
||||||
client.getCredentialsProvider().setCredentials(
|
|
||||||
new AuthScope(getProxyHost(), getProxyPort()),
|
new AuthScope(getProxyHost(), getProxyPort()),
|
||||||
new UsernamePasswordCredentials(getProxyUser(), getProxyPassword()));
|
new UsernamePasswordCredentials(getProxyUser(), getProxyPassword()));
|
||||||
|
clientBuilder.setDefaultCredentialsProvider(credentialsProvider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpParams params = client.getParams();
|
requestConfigBuilder.setSocketTimeout(soTimeout);
|
||||||
HttpConnectionParams.setSoTimeout(params, soTimeout);
|
requestConfigBuilder.setCookieSpec(CookieSpecs.DEFAULT);
|
||||||
HttpClientParams.setCookiePolicy(params, CookiePolicy.BROWSER_COMPATIBILITY);
|
clientBuilder.setDefaultRequestConfig(requestConfigBuilder.build());
|
||||||
|
|
||||||
return client;
|
return clientBuilder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ClientConnectionManager createClientConnectionManager() {
|
protected HttpClientConnectionManager createClientConnectionManager() {
|
||||||
return new PoolingClientConnectionManager();
|
return new PoolingHttpClientConnectionManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void configureMethod(AbstractHttpMessage method) {
|
protected void configureMethod(AbstractHttpMessage method) {
|
||||||
|
|
|
@ -24,11 +24,13 @@ import org.apache.activemq.broker.SslContext;
|
||||||
import org.apache.activemq.transport.http.HttpClientTransport;
|
import org.apache.activemq.transport.http.HttpClientTransport;
|
||||||
import org.apache.activemq.transport.util.TextWireFormat;
|
import org.apache.activemq.transport.util.TextWireFormat;
|
||||||
import org.apache.activemq.util.IOExceptionSupport;
|
import org.apache.activemq.util.IOExceptionSupport;
|
||||||
import org.apache.http.conn.ClientConnectionManager;
|
import org.apache.http.config.Registry;
|
||||||
import org.apache.http.conn.scheme.Scheme;
|
import org.apache.http.config.RegistryBuilder;
|
||||||
import org.apache.http.conn.scheme.SchemeRegistry;
|
import org.apache.http.conn.HttpClientConnectionManager;
|
||||||
import org.apache.http.conn.ssl.SSLSocketFactory;
|
import org.apache.http.conn.socket.ConnectionSocketFactory;
|
||||||
import org.apache.http.impl.conn.PoolingClientConnectionManager;
|
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 {
|
public class HttpsClientTransport extends HttpClientTransport {
|
||||||
|
|
||||||
|
@ -37,19 +39,17 @@ public class HttpsClientTransport extends HttpClientTransport {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ClientConnectionManager createClientConnectionManager() {
|
protected HttpClientConnectionManager createClientConnectionManager() {
|
||||||
PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager(createSchemeRegistry());
|
return new PoolingHttpClientConnectionManager(createRegistry());
|
||||||
return connectionManager;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private SchemeRegistry createSchemeRegistry() {
|
private Registry<ConnectionSocketFactory> createRegistry() {
|
||||||
|
|
||||||
SchemeRegistry schemeRegistry = new SchemeRegistry();
|
RegistryBuilder<ConnectionSocketFactory> registryBuilder = RegistryBuilder.<ConnectionSocketFactory>create();
|
||||||
try {
|
try {
|
||||||
SSLSocketFactory sslSocketFactory = new SSLSocketFactory(createSocketFactory(),
|
SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(createSocketFactory(), new DefaultHostnameVerifier());
|
||||||
SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
|
registryBuilder.register("https", sslConnectionFactory);
|
||||||
schemeRegistry.register(new Scheme("https", getRemoteUrl().getPort(), sslSocketFactory));
|
return registryBuilder.build();
|
||||||
return schemeRegistry;
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IllegalStateException("Failure trying to create scheme registry", e);
|
throw new IllegalStateException("Failure trying to create scheme registry", e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
|
||||||
* <p>
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* <p>
|
|
||||||
* 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 <a href="https://issues.apache.org/jira/browse/AMQ-6571">AMQ-6571: HttpClientTransport refuses to accept cookies using `Expires' header</a>
|
|
||||||
*/
|
|
||||||
@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()));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -57,14 +57,14 @@ public abstract class ClassLoaderSPIConnectionFactory implements SPIConnectionFa
|
||||||
} else {
|
} else {
|
||||||
LOG.info("Adding extension dir: " + f.getAbsolutePath());
|
LOG.info("Adding extension dir: " + f.getAbsolutePath());
|
||||||
|
|
||||||
urls.add(f.toURL());
|
urls.add(f.toURI().toURL());
|
||||||
|
|
||||||
File[] files = f.listFiles();
|
File[] files = f.listFiles();
|
||||||
if (files != null) {
|
if (files != null) {
|
||||||
for (int j = 0; j < files.length; j++) {
|
for (int j = 0; j < files.length; j++) {
|
||||||
if (files[j].getName().endsWith(".zip") || files[j].getName().endsWith(".jar")) {
|
if (files[j].getName().endsWith(".zip") || files[j].getName().endsWith(".jar")) {
|
||||||
LOG.info("Adding extension dir: " + files[j].getAbsolutePath());
|
LOG.info("Adding extension dir: " + files[j].getAbsolutePath());
|
||||||
urls.add(files[j].toURL());
|
urls.add(files[j].toURI().toURL());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
4
pom.xml
4
pom.xml
|
@ -69,8 +69,8 @@
|
||||||
<hawtdispatch-version>1.22</hawtdispatch-version>
|
<hawtdispatch-version>1.22</hawtdispatch-version>
|
||||||
<howl-version>0.1.8</howl-version>
|
<howl-version>0.1.8</howl-version>
|
||||||
<hsqldb-version>1.8.0.12</hsqldb-version>
|
<hsqldb-version>1.8.0.12</hsqldb-version>
|
||||||
<httpclient-version>4.5.6</httpclient-version>
|
<httpclient-version>4.5.9</httpclient-version>
|
||||||
<httpcore-version>4.4.10</httpcore-version>
|
<httpcore-version>4.4.11</httpcore-version>
|
||||||
<insight-version>1.2.0.Beta4</insight-version>
|
<insight-version>1.2.0.Beta4</insight-version>
|
||||||
<jackson-version>2.9.9</jackson-version>
|
<jackson-version>2.9.9</jackson-version>
|
||||||
<jackson-databind-version>2.9.9.1</jackson-databind-version>
|
<jackson-databind-version>2.9.9.1</jackson-databind-version>
|
||||||
|
|
Loading…
Reference in New Issue