diff --git a/modules/org.restlet.ext.jetty/src/org/restlet/ext/jetty/internal/JettyClientCall.java b/modules/org.restlet.ext.jetty/src/org/restlet/ext/jetty/internal/JettyClientCall.java index 176db78c22..aec8101bc8 100644 --- a/modules/org.restlet.ext.jetty/src/org/restlet/ext/jetty/internal/JettyClientCall.java +++ b/modules/org.restlet.ext.jetty/src/org/restlet/ext/jetty/internal/JettyClientCall.java @@ -29,12 +29,12 @@ import java.io.OutputStream; import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; -import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.logging.Level; import org.eclipse.jetty.client.HttpRequest; +import org.eclipse.jetty.client.api.Result; import org.eclipse.jetty.client.util.InputStreamContentProvider; import org.eclipse.jetty.client.util.InputStreamResponseListener; import org.eclipse.jetty.http.HttpField; @@ -70,9 +70,9 @@ public class JettyClientCall extends ClientCall { private final HttpRequest httpRequest; /** - * The wrapped HTTP response. + * The wrapped HTTP result. */ - private volatile org.eclipse.jetty.client.api.Response httpResponse; + private volatile Result result; /** * The wrapped input stream response listener. @@ -128,7 +128,7 @@ public HttpRequest getHttpRequest() { * @return The HTTP response. */ public org.eclipse.jetty.client.api.Response getHttpResponse() { - return this.httpResponse; + return (this.result != null) ? this.result.getResponse() : null; } /** @@ -203,7 +203,7 @@ public Representation getResponseEntity(Response response) { */ @Override public Series
getResponseHeaders() { - final Series
result = super.getResponseHeaders(); + final Series
responseHeaders = super.getResponseHeaders(); if (!this.responseHeadersAdded) { final org.eclipse.jetty.client.api.Response httpResponse = getHttpResponse(); @@ -211,14 +211,14 @@ public Series
getResponseHeaders() { final HttpFields headers = httpResponse.getHeaders(); if (headers != null) { for (HttpField header : headers) - result.add(header.getName(), header.getValue()); + responseHeaders.add(header.getName(), header.getValue()); } } this.responseHeadersAdded = true; } - return result; + return responseHeaders; } /** @@ -253,7 +253,7 @@ public int getStatusCode() { */ @Override public Status sendRequest(Request request) { - Status result = null; + Status status = null; try { final Representation entity = request.getEntity(); @@ -282,41 +282,34 @@ public Status sendRequest(Request request) { // Ensure that the connection is active this.inputStreamResponseListener = new InputStreamResponseListener(); this.httpRequest.send(this.inputStreamResponseListener); - this.httpResponse = this.inputStreamResponseListener.get( + this.result = this.inputStreamResponseListener.await( clientHelper.getIdleTimeout(), TimeUnit.MILLISECONDS); - result = new Status(getStatusCode(), getReasonPhrase()); + status = new Status(getStatusCode(), this.result.getFailure(), getReasonPhrase()); } catch (IOException e) { this.clientHelper.getLogger().log(Level.WARNING, "An error occurred while reading the request entity.", e); - result = new Status(Status.CONNECTOR_ERROR_INTERNAL, e); + status = new Status(Status.CONNECTOR_ERROR_INTERNAL, e); // Release the connection getHttpRequest().abort(e); } catch (TimeoutException e) { this.clientHelper.getLogger().log(Level.WARNING, "The HTTP request timed out.", e); - result = new Status(Status.CONNECTOR_ERROR_COMMUNICATION, e); + status = new Status(Status.CONNECTOR_ERROR_COMMUNICATION, e); // Release the connection getHttpRequest().abort(e); } catch (InterruptedException e) { this.clientHelper.getLogger().log(Level.WARNING, "The HTTP request thread was interrupted.", e); - result = new Status(Status.CONNECTOR_ERROR_COMMUNICATION, e); - - // Release the connection - getHttpRequest().abort(e); - } catch (ExecutionException e) { - this.clientHelper.getLogger().log(Level.WARNING, - "An error occurred while processing the HTTP request.", e); - result = new Status(Status.CONNECTOR_ERROR_COMMUNICATION, e); + status = new Status(Status.CONNECTOR_ERROR_COMMUNICATION, e); // Release the connection getHttpRequest().abort(e); } - return result; + return status; } @Override