diff --git a/connectors/resteasy/pom.xml b/connectors/resteasy/pom.xml
index 2d04054b4..94c39e93b 100644
--- a/connectors/resteasy/pom.xml
+++ b/connectors/resteasy/pom.xml
@@ -11,14 +11,20 @@
jar
- 2.3.7.Final
+ 3.1.4.Final
org.jboss.resteasy
- resteasy-jaxrs
+ resteasy-client
${resteasy-version}
+
+
+ httpclient
+ org.apache.httpcomponents
+
+
com.fasterxml.jackson.jaxrs
@@ -30,6 +36,11 @@
commons-logging
1.2
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.3
+
diff --git a/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpCommand.java b/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpCommand.java
index 945b61af3..1e02e7485 100644
--- a/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpCommand.java
+++ b/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpCommand.java
@@ -1,27 +1,30 @@
package org.openstack4j.connectors.resteasy;
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.core.UriBuilder;
-
-import org.jboss.resteasy.client.ClientRequest;
-import org.jboss.resteasy.client.ClientResponse;
-import org.openstack4j.connectors.resteasy.executors.ApacheHttpClientExecutor;
+import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
+import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;
+import org.openstack4j.connectors.resteasy.executors.ApacheHttpClientEngine;
import org.openstack4j.core.transport.ClientConstants;
import org.openstack4j.core.transport.HttpRequest;
import org.openstack4j.core.transport.functions.EndpointURIFromRequestFunction;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.Invocation;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriBuilder;
+import java.util.List;
+import java.util.Map;
+
/**
- * HttpCommand is responsible for executing the actual request driven by the HttpExecutor.
- *
+ * HttpCommand is responsible for executing the actual request driven by the HttpExecutor.
+ *
* @param
*/
public final class HttpCommand {
private HttpRequest request;
- private ClientRequest client;
+ private ResteasyWebTarget resteasyWebTarget;
private int retries;
+ private Invocation.Builder resteasyRequest ;
private HttpCommand(HttpRequest request) {
this.request = request;
@@ -33,37 +36,39 @@ private HttpCommand(HttpRequest request) {
* @return the command
*/
public static HttpCommand create(HttpRequest request) {
- HttpCommand command = new HttpCommand(request);
+ HttpCommand command = new HttpCommand<>(request);
command.initialize();
return command;
}
private void initialize() {
- client = new ClientRequest(UriBuilder.fromUri(new EndpointURIFromRequestFunction().apply(request)),
- ApacheHttpClientExecutor.create(request.getConfig()), ResteasyClientFactory.getInstance());
-
- client.followRedirects(true);
-
+
+ resteasyWebTarget = new ResteasyClientBuilder().httpEngine(ApacheHttpClientEngine.create(request.getConfig()))
+ .providerFactory(ResteasyClientFactory.getInstance()).build()
+ .target(UriBuilder.fromUri(new EndpointURIFromRequestFunction().apply(request)));
+
populateQueryParams(request);
+ resteasyRequest = resteasyWebTarget.request();
populateHeaders(request);
}
/**
* Executes the command and returns the Response
- *
+ *
* @return the response
- * @throws Exception
*/
- public ClientResponse execute() throws Exception {
-
+ public Response execute(){
+
+ Invocation webRequest;
if (request.getEntity() != null) {
- client.body(request.getContentType(), request.getEntity());
+ webRequest = resteasyRequest.build(request.getMethod().name(), Entity.entity(request.getEntity(), request.getContentType()));
+ } else if (request.hasJson()) {
+ webRequest= resteasyRequest.build(request.getMethod().name() , Entity.entity(request.getJson(),ClientConstants.CONTENT_TYPE_JSON));
+ }else{
+ webRequest = resteasyRequest.build(request.getMethod().name());
}
- else if(request.hasJson()) {
- client.body(ClientConstants.CONTENT_TYPE_JSON, request.getJson());
- }
- ClientResponse response = client.httpMethod(request.getMethod().name(), request.getReturnType());
- return response;
+
+ return webRequest.invoke();
}
/**
@@ -72,21 +77,21 @@ else if(request.hasJson()) {
public boolean hasEntity() {
return request.getEntity() != null;
}
-
+
/**
* @return current retry execution count for this command
*/
public int getRetries() {
return retries;
}
-
+
/**
* @return incremement's the retry count and returns self
*/
public HttpCommand incrementRetriesAndReturn() {
- initialize();
- retries++;
- return this;
+ initialize();
+ retries++;
+ return this;
}
public HttpRequest getRequest() {
@@ -97,9 +102,9 @@ private void populateQueryParams(HttpRequest request) {
if (!request.hasQueryParams()) return;
- for(Map.Entry > entry : request.getQueryParams().entrySet()) {
+ for (Map.Entry> entry : request.getQueryParams().entrySet()) {
for (Object o : entry.getValue()) {
- client = client.queryParameter(entry.getKey(), o);
+ resteasyWebTarget = resteasyWebTarget.queryParam(entry.getKey(), o);
}
}
}
@@ -108,8 +113,8 @@ private void populateHeaders(HttpRequest request) {
if (!request.hasHeaders()) return;
- for(Map.Entry h : request.getHeaders().entrySet()) {
- client.header(h.getKey(), h.getValue());
+ for (Map.Entry h : request.getHeaders().entrySet()) {
+ resteasyRequest.header(h.getKey(), h.getValue());
}
}
}
diff --git a/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpExecutorServiceImpl.java b/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpExecutorServiceImpl.java
index fd044f860..59b5f1b30 100644
--- a/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpExecutorServiceImpl.java
+++ b/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpExecutorServiceImpl.java
@@ -1,6 +1,5 @@
package org.openstack4j.connectors.resteasy;
-import org.jboss.resteasy.client.ClientResponse;
import org.openstack4j.api.exceptions.ConnectionException;
import org.openstack4j.api.exceptions.ResponseException;
import org.openstack4j.core.transport.ClientConstants;
@@ -10,6 +9,8 @@
import org.openstack4j.openstack.internal.OSAuthenticator;
import org.openstack4j.openstack.internal.OSClientSession;
+import javax.ws.rs.core.Response;
+
/**
* HttpExecutor is the default implementation for HttpExecutorService which is responsible for interfacing with Resteasy and mapping common status codes, requests and responses
* back to the common API
@@ -58,7 +59,7 @@ private HttpResponse invoke(HttpRequest request) throws Exception {
}
private HttpResponse invokeRequest(HttpCommand command) throws Exception {
- ClientResponse response = command.execute();
+ Response response = command.execute();
if (command.getRetries() == 0 && response.getStatus() == 401 && !command.getRequest().getHeaders().containsKey(ClientConstants.HEADER_OS4J_AUTH))
{
OSAuthenticator.reAuthenticate();
diff --git a/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpResponseImpl.java b/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpResponseImpl.java
index 552139636..c523e56b5 100644
--- a/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpResponseImpl.java
+++ b/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/HttpResponseImpl.java
@@ -6,8 +6,8 @@
import java.util.Map;
import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
-import org.jboss.resteasy.client.ClientResponse;
import org.openstack4j.core.transport.ClientConstants;
import org.openstack4j.core.transport.ExecutionOptions;
import org.openstack4j.core.transport.HttpEntityHandler;
@@ -15,9 +15,9 @@
public class HttpResponseImpl implements HttpResponse {
- private final ClientResponse> response;
+ private final Response response;
- private HttpResponseImpl(ClientResponse> response) {
+ private HttpResponseImpl(Response response) {
this.response = response;
}
@@ -27,7 +27,7 @@ private HttpResponseImpl(ClientResponse> response) {
* @param response the response
* @return the HttpResponse
*/
- public static HttpResponseImpl wrap(ClientResponse> response) {
+ public static HttpResponseImpl wrap(Response response) {
return new HttpResponseImpl(response);
}
@@ -36,7 +36,7 @@ public static HttpResponseImpl wrap(ClientResponse> response) {
*
* @return the response
*/
- public ClientResponse> unwrap() {
+ public Response unwrap() {
return response;
}
@@ -77,14 +77,15 @@ public int getStatus() {
*/
@Override
public String getStatusMessage() {
- return response.getResponseStatus().getReasonPhrase();
+ return response.getStatusInfo().getReasonPhrase();
}
/**
* @return the input stream
*/
public InputStream getInputStream() {
- return response.getEntity(InputStream.class);
+ response.bufferEntity();
+ return response.readEntity(InputStream.class);
}
/**
@@ -94,18 +95,18 @@ public InputStream getInputStream() {
* @return the header as a String or null if not found
*/
public String header(String name) {
- return response.getHeaders().getFirst(name);
+ return response.getStringHeaders().getFirst(name);
}
/**
* @return the a Map of Header Name to Header Value
*/
public Map headers() {
- Map headers = new HashMap();
- MultivaluedMap responseHeaders = response.getHeaders();
+ Map headers = new HashMap<>();
+ MultivaluedMap responseHeaders = response.getStringHeaders();
for (String key : responseHeaders.keySet()) {
- headers.put(key, responseHeaders.getFirst(key).toString());
+ headers.put(key, responseHeaders.getFirst(key));
}
return headers;
@@ -113,12 +114,13 @@ public Map headers() {
@Override
public T readEntity(Class typeToReadAs) {
- return response.getEntity(typeToReadAs);
+ response.bufferEntity();
+ return response.readEntity(typeToReadAs);
}
@Override
public void close() throws IOException {
- response.releaseConnection();
+ response.close();
}
@Override
diff --git a/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/executors/ApacheHttpClientEngine.java b/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/executors/ApacheHttpClientEngine.java
new file mode 100644
index 000000000..e32bd948c
--- /dev/null
+++ b/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/executors/ApacheHttpClientEngine.java
@@ -0,0 +1,79 @@
+package org.openstack4j.connectors.resteasy.executors;
+
+import org.apache.http.HttpHost;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.impl.client.DefaultRedirectStrategy;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.client.HttpClients;
+import org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine;
+import org.openstack4j.core.transport.Config;
+import org.openstack4j.core.transport.UntrustedSSL;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * Default Apache HttpClient based Executor
+ *
+ * @author Jeremy Unruh
+ */
+public class ApacheHttpClientEngine extends ApacheHttpClient4Engine {
+
+ ApacheHttpClientEngine(HttpClient client) {
+ super(client);
+ }
+ private static final Logger LOGGER = LoggerFactory.getLogger(ApacheHttpClientEngine.class);
+
+ public static ApacheHttpClientEngine create(Config config) {
+
+ RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();
+
+ if (config.getReadTimeout() > 0) {
+ requestConfigBuilder.setConnectionRequestTimeout(config.getReadTimeout());
+ }
+
+ if (config.getConnectTimeout() > 0) {
+ requestConfigBuilder.setConnectTimeout(config.getConnectTimeout());
+ }
+
+ /*HttpClient client*/
+
+ HttpClientBuilder httpClientBuilder = HttpClients.custom();
+
+ if (config.isIgnoreSSLVerification()) {
+ httpClientBuilder.setSSLContext(UntrustedSSL.getSSLContext());
+ httpClientBuilder.setSSLHostnameVerifier(new NoopHostnameVerifier());
+ }
+
+ if (config.getHostNameVerifier() != null) {
+ httpClientBuilder.setSSLHostnameVerifier(config.getHostNameVerifier());
+ }
+
+ if (config.getProxy() != null) {
+ try {
+ URL url = new URL(config.getProxy().getHost());
+ HttpHost proxy = new HttpHost(url.getHost(), config.getProxy().getPort(), url.getProtocol());
+ requestConfigBuilder.setProxy(proxy);
+ } catch (MalformedURLException e) {
+ LOGGER.error("Invalid proxy Url :%s",config.getProxy(),e);
+ }
+ }
+
+ httpClientBuilder.setDefaultRequestConfig(requestConfigBuilder.build());
+ httpClientBuilder.setRedirectStrategy(new DefaultRedirectStrategy() {
+ @Override
+ protected boolean isRedirectable(String method)
+ {
+ return true;
+ }
+ });
+
+ HttpClient client = httpClientBuilder.build();
+ return new ApacheHttpClientEngine(client);
+ }
+
+}
diff --git a/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/executors/ApacheHttpClientExecutor.java b/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/executors/ApacheHttpClientExecutor.java
deleted file mode 100644
index 067229e6c..000000000
--- a/connectors/resteasy/src/main/java/org/openstack4j/connectors/resteasy/executors/ApacheHttpClientExecutor.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.openstack4j.connectors.resteasy.executors;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.apache.http.HttpHost;
-import org.apache.http.client.HttpClient;
-import org.apache.http.conn.params.ConnRoutePNames;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.params.BasicHttpParams;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
-import org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor;
-import org.openstack4j.core.transport.Config;
-
-/**
- * Default Apache HttpClient based Executor
- *
- * @author Jeremy Unruh
- */
-public class ApacheHttpClientExecutor extends ApacheHttpClient4Executor {
-
- ApacheHttpClientExecutor(HttpClient client) {
- super(client);
- }
-
- public static ApacheHttpClientExecutor create(Config config) {
-
- HttpParams params = new BasicHttpParams();
- if (config.getReadTimeout() > 0)
- HttpConnectionParams.setSoTimeout(params, config.getReadTimeout());
-
- if (config.getConnectTimeout() > 0)
- HttpConnectionParams.setConnectionTimeout(params, config.getConnectTimeout());
-
- HttpClient client = new DefaultHttpClient(params);
-
- if (config.getProxy() != null) {
- try {
- URL url = new URL(config.getProxy().getHost());
- HttpHost proxy = new HttpHost(url.getHost(), config.getProxy().getPort(), url.getProtocol());
- client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);
- } catch (MalformedURLException e) {
- e.printStackTrace();
- }
- }
-
- return new ApacheHttpClientExecutor(client);
- }
-
-}