You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2012/12/02 15:03:54 UTC
svn commit: r1416177 - in /httpcomponents/httpclient/trunk/httpclient/src:
main/java/org/apache/http/impl/client/execchain/
test/java/org/apache/http/impl/client/execchain/
test/java/org/apache/http/impl/client/integration/
Author: olegk
Date: Sun Dec 2 14:03:52 2012
New Revision: 1416177
URL: http://svn.apache.org/viewvc?rev=1416177&view=rev
Log:
Refactored execution proxy classes; entity enclosing requests are enhanced only when necessary
Added:
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ExecProxies.java (with props)
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RequestEntityExecHandler.java (with props)
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ResponseProxyHandler.java (contents, props changed)
- copied, changed from r1414815, httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/HttpResponseProxy.java
Removed:
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/HttpResponseProxy.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RequestEntityWrapper.java
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/execchain/TestRequestEntityWrapper.java
Modified:
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ClientExecChain.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ConnectionReleaseTriggerImpl.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/HttpRequestWrapper.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/MainClientExec.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RedirectExec.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RetryExec.java
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestClientAuthentication.java
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ClientExecChain.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ClientExecChain.java?rev=1416177&r1=1416176&r2=1416177&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ClientExecChain.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ClientExecChain.java Sun Dec 2 14:03:52 2012
@@ -42,8 +42,8 @@ import org.apache.http.conn.routing.Http
* <p/>
* Important: please note it is required for decorators that implement post execution aspects
* or response post-processing of any sort to release resources associated with the response
- * by calling {@link HttpResponseProxy#close()} methods in case of an I/O, protocol or runtime
- * exception, or in case the response is not propagated to the caller.
+ * by calling {@link CloseableHttpResponse#close()} methods in case of an I/O, protocol or
+ * runtime exception, or in case the response is not propagated to the caller.
*
* @since 4.3
*/
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ConnectionReleaseTriggerImpl.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ConnectionReleaseTriggerImpl.java?rev=1416177&r1=1416176&r2=1416177&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ConnectionReleaseTriggerImpl.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ConnectionReleaseTriggerImpl.java Sun Dec 2 14:03:52 2012
@@ -27,6 +27,7 @@
package org.apache.http.impl.client.execchain;
+import java.io.Closeable;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
@@ -43,7 +44,7 @@ import org.apache.http.conn.HttpClientCo
* @since 4.3
*/
@ThreadSafe
-class ConnectionReleaseTriggerImpl implements ConnectionReleaseTrigger, Cancellable {
+class ConnectionReleaseTriggerImpl implements ConnectionReleaseTrigger, Cancellable, Closeable {
private final Log log;
@@ -145,4 +146,8 @@ class ConnectionReleaseTriggerImpl imple
return this.released;
}
+ public void close() throws IOException {
+ abortConnection();
+ }
+
}
Added: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ExecProxies.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ExecProxies.java?rev=1416177&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ExecProxies.java (added)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ExecProxies.java Sun Dec 2 14:03:52 2012
@@ -0,0 +1,67 @@
+package org.apache.http.impl.client.execchain;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpEntityEnclosingRequest;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.annotation.NotThreadSafe;
+import org.apache.http.client.methods.CloseableHttpResponse;
+
+/**
+ * Execution proxies for HTTP message objects.
+ *
+ * @since 4.3
+ */
+@NotThreadSafe
+class ExecProxies {
+
+ static void enhanceEntity(final HttpEntityEnclosingRequest request) {
+ HttpEntity entity = request.getEntity();
+ if (entity != null && !entity.isRepeatable() && !isEnhanced(entity)) {
+ HttpEntity proxy = (HttpEntity) Proxy.newProxyInstance(
+ HttpEntity.class.getClassLoader(),
+ new Class<?>[] { HttpEntity.class },
+ new RequestEntityExecHandler(entity));
+ request.setEntity(proxy);
+ }
+ }
+
+ static boolean isEnhanced(final HttpEntity entity) {
+ if (entity != null && Proxy.isProxyClass(entity.getClass())) {
+ InvocationHandler handler = Proxy.getInvocationHandler(entity);
+ return handler instanceof RequestEntityExecHandler;
+ } else {
+ return false;
+ }
+ }
+
+ static boolean isRepeatable(final HttpRequest request) {
+ if (request instanceof HttpEntityEnclosingRequest) {
+ HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
+ if (entity != null) {
+ if (isEnhanced(entity)) {
+ RequestEntityExecHandler handler = (RequestEntityExecHandler)
+ Proxy.getInvocationHandler(entity);
+ if (!handler.isConsumed()) {
+ return true;
+ }
+ }
+ return entity.isRepeatable();
+ }
+ }
+ return true;
+ }
+
+ public static CloseableHttpResponse enhanceResponse(
+ final HttpResponse original,
+ final ConnectionReleaseTriggerImpl connReleaseTrigger) {
+ return (CloseableHttpResponse) Proxy.newProxyInstance(
+ ResponseProxyHandler.class.getClassLoader(),
+ new Class<?>[] { CloseableHttpResponse.class },
+ new ResponseProxyHandler(original, connReleaseTrigger));
+ }
+
+}
\ No newline at end of file
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ExecProxies.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ExecProxies.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ExecProxies.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/HttpRequestWrapper.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/HttpRequestWrapper.java?rev=1416177&r1=1416176&r2=1416177&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/HttpRequestWrapper.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/HttpRequestWrapper.java Sun Dec 2 14:03:52 2012
@@ -35,6 +35,7 @@ import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpRequest;
+import org.apache.http.HttpVersion;
import org.apache.http.ProtocolException;
import org.apache.http.ProtocolVersion;
import org.apache.http.RequestLine;
@@ -53,12 +54,15 @@ import org.apache.http.protocol.HTTP;
public class HttpRequestWrapper extends AbstractHttpMessage implements HttpRequest {
private final HttpRequest original;
-
+ private final String method;
+ private ProtocolVersion version;
private URI uri;
private HttpRequestWrapper(final HttpRequest request) {
super();
this.original = request;
+ this.version = this.original.getRequestLine().getProtocolVersion();
+ this.method = this.original.getRequestLine().getMethod();
if (request instanceof HttpUriRequest) {
this.uri = ((HttpUriRequest) request).getURI();
} else {
@@ -71,6 +75,10 @@ public class HttpRequestWrapper extends
return this.original.getProtocolVersion();
}
+ public void setProtocolVersion(final ProtocolVersion version) {
+ this.version = version;
+ }
+
public URI getURI() {
return this.uri;
}
@@ -80,28 +88,23 @@ public class HttpRequestWrapper extends
}
public RequestLine getRequestLine() {
- ProtocolVersion version = this.original.getRequestLine().getProtocolVersion();
- String method = this.original.getRequestLine().getMethod();
- String uritext = null;
+ String requestUri = null;
if (this.uri != null) {
- uritext = this.uri.toASCIIString();
+ requestUri = this.uri.toASCIIString();
} else {
- uritext = this.original.getRequestLine().getUri();
+ requestUri = this.original.getRequestLine().getUri();
}
- if (uritext == null || uritext.length() == 0) {
- uritext = "/";
+ if (requestUri == null || requestUri.length() == 0) {
+ requestUri = "/";
}
- return new BasicRequestLine(method, uritext, version);
+ ProtocolVersion version = this.version != null ? this.version : HttpVersion.HTTP_1_1;
+ return new BasicRequestLine(this.method, requestUri, version);
}
public HttpRequest getOriginal() {
return this.original;
}
- public boolean isRepeatable() {
- return true;
- }
-
@Override
public String toString() {
return getRequestLine() + " " + this.headergroup;
@@ -115,7 +118,7 @@ public class HttpRequestWrapper extends
public HttpEntityEnclosingRequestWrapper(final HttpEntityEnclosingRequest request)
throws ProtocolException {
super(request);
- setEntity(request.getEntity());
+ this.entity = request.getEntity();
}
public HttpEntity getEntity() {
@@ -123,7 +126,7 @@ public class HttpRequestWrapper extends
}
public void setEntity(final HttpEntity entity) {
- this.entity = entity != null ? new RequestEntityWrapper(entity) : null;
+ this.entity = entity;
}
public boolean expectContinue() {
@@ -131,11 +134,6 @@ public class HttpRequestWrapper extends
return expect != null && HTTP.EXPECT_CONTINUE.equalsIgnoreCase(expect.getValue());
}
- @Override
- public boolean isRepeatable() {
- return this.entity == null || this.entity.isRepeatable();
- }
-
}
public static HttpRequestWrapper wrap(final HttpRequest request) throws ProtocolException {
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/MainClientExec.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/MainClientExec.java?rev=1416177&r1=1416176&r2=1416177&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/MainClientExec.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/MainClientExec.java Sun Dec 2 14:03:52 2012
@@ -36,6 +36,7 @@ import org.apache.commons.logging.LogFac
import org.apache.http.ConnectionReuseStrategy;
import org.apache.http.HttpClientConnection;
import org.apache.http.HttpEntity;
+import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
@@ -164,6 +165,10 @@ public class MainClientExec implements C
context.setAttribute(ClientContext.PROXY_AUTH_STATE, proxyAuthState);
}
+ if (request instanceof HttpEntityEnclosingRequest) {
+ ExecProxies.enhanceEntity((HttpEntityEnclosingRequest) request);
+ }
+
Object userToken = context.getUserToken();
final ConnectionRequest connRequest = connManager.requestConnection(route, userToken);
@@ -214,7 +219,7 @@ public class MainClientExec implements C
HttpResponse response = null;
for (int execCount = 1;; execCount++) {
- if (execCount > 1 && !request.isRepeatable()) {
+ if (execCount > 1 && !ExecProxies.isRepeatable(request)) {
throw new NonRepeatableRequestException("Cannot retry request " +
"with a non-repeatable request entity.");
}
@@ -327,9 +332,9 @@ public class MainClientExec implements C
if (entity == null || !entity.isStreaming()) {
// connection not needed and (assumed to be) in re-usable state
releaseTrigger.releaseConnection();
- return HttpResponseProxy.newProxy(response, null);
+ return ExecProxies.enhanceResponse(response, null);
} else {
- return HttpResponseProxy.newProxy(response, releaseTrigger);
+ return ExecProxies.enhanceResponse(response, releaseTrigger);
}
} catch (ConnectionShutdownException ex) {
InterruptedIOException ioex = new InterruptedIOException(
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RedirectExec.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RedirectExec.java?rev=1416177&r1=1416176&r2=1416177&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RedirectExec.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RedirectExec.java Sun Dec 2 14:03:52 2012
@@ -32,6 +32,7 @@ import java.net.URI;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
@@ -116,6 +117,9 @@ public class RedirectExec implements Cli
HttpRequest original = currentRequest.getOriginal();
currentRequest = HttpRequestWrapper.wrap(redirect);
currentRequest.setHeaders(original.getAllHeaders());
+ if (original instanceof HttpEntityEnclosingRequest) {
+ ExecProxies.enhanceEntity((HttpEntityEnclosingRequest) request);
+ }
URI uri = currentRequest.getURI();
HttpHost newTarget = URIUtils.extractHost(uri);
Added: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RequestEntityExecHandler.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RequestEntityExecHandler.java?rev=1416177&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RequestEntityExecHandler.java (added)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RequestEntityExecHandler.java Sun Dec 2 14:03:52 2012
@@ -0,0 +1,62 @@
+package org.apache.http.impl.client.execchain;
+
+import java.io.OutputStream;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.annotation.NotThreadSafe;
+
+/**
+ * A wrapper class for {@link HttpEntity} enclosed in a request message.
+ *
+ * @since 4.3
+ */
+@NotThreadSafe
+class RequestEntityExecHandler implements InvocationHandler {
+
+ private static final Method WRITE_TO_METHOD;
+
+ static {
+ try {
+ WRITE_TO_METHOD = HttpEntity.class.getMethod("writeTo", OutputStream.class);
+ } catch (NoSuchMethodException ex) {
+ throw new Error(ex);
+ }
+ }
+
+ private final HttpEntity original;
+ private boolean consumed = false;
+
+ RequestEntityExecHandler(final HttpEntity original) {
+ super();
+ this.original = original;
+ }
+
+ public HttpEntity getOriginal() {
+ return original;
+ }
+
+ public boolean isConsumed() {
+ return consumed;
+ }
+
+ public Object invoke(
+ final Object proxy, final Method method, final Object[] args) throws Throwable {
+ try {
+ if (method.equals(WRITE_TO_METHOD)) {
+ this.consumed = true;
+ }
+ return method.invoke(original, args);
+ } catch (InvocationTargetException ex) {
+ Throwable cause = ex.getCause();
+ if (cause != null) {
+ throw cause;
+ } else {
+ throw ex;
+ }
+ }
+ }
+
+}
\ No newline at end of file
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RequestEntityExecHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RequestEntityExecHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RequestEntityExecHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ResponseProxyHandler.java (from r1414815, httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/HttpResponseProxy.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ResponseProxyHandler.java?p2=httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ResponseProxyHandler.java&p1=httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/HttpResponseProxy.java&r1=1414815&r2=1416177&rev=1416177&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/HttpResponseProxy.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ResponseProxyHandler.java Sun Dec 2 14:03:52 2012
@@ -27,16 +27,15 @@
package org.apache.http.impl.client.execchain;
+import java.io.Closeable;
import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.annotation.NotThreadSafe;
-import org.apache.http.client.methods.CloseableHttpResponse;
/**
* A proxy class for {@link HttpResponse} that can be used to release client connection
@@ -45,12 +44,22 @@ import org.apache.http.client.methods.Cl
* @since 4.3
*/
@NotThreadSafe
-class HttpResponseProxy implements InvocationHandler {
+class ResponseProxyHandler implements InvocationHandler {
+
+ private static final Method CLOSE_METHOD;
+
+ static {
+ try {
+ CLOSE_METHOD = Closeable.class.getMethod("close");
+ } catch (NoSuchMethodException ex) {
+ throw new Error(ex);
+ }
+ }
private final HttpResponse original;
private final ConnectionReleaseTriggerImpl connReleaseTrigger;
- private HttpResponseProxy(
+ ResponseProxyHandler(
final HttpResponse original,
final ConnectionReleaseTriggerImpl connReleaseTrigger) {
super();
@@ -70,8 +79,7 @@ class HttpResponseProxy implements Invoc
public Object invoke(
final Object proxy, final Method method, final Object[] args) throws Throwable {
- String mname = method.getName();
- if (mname.equals("close")) {
+ if (method.equals(CLOSE_METHOD)) {
close();
return null;
} else {
@@ -88,13 +96,4 @@ class HttpResponseProxy implements Invoc
}
}
- public static CloseableHttpResponse newProxy(
- final HttpResponse original,
- final ConnectionReleaseTriggerImpl connReleaseTrigger) {
- return (CloseableHttpResponse) Proxy.newProxyInstance(
- HttpResponseProxy.class.getClassLoader(),
- new Class<?>[] { CloseableHttpResponse.class },
- new HttpResponseProxy(original, connReleaseTrigger));
- }
-
}
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ResponseProxyHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ResponseProxyHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/ResponseProxyHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RetryExec.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RetryExec.java?rev=1416177&r1=1416176&r2=1416177&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RetryExec.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/execchain/RetryExec.java Sun Dec 2 14:03:52 2012
@@ -33,13 +33,11 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.Header;
import org.apache.http.HttpException;
-import org.apache.http.HttpRequest;
import org.apache.http.annotation.Immutable;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.NonRepeatableRequestException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpExecutionAware;
-import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.conn.routing.HttpRoute;
@@ -86,8 +84,7 @@ public class RetryExec implements Client
try {
return this.requestExecutor.execute(route, request, context, execAware);
} catch (IOException ex) {
- HttpRequest original = request.getOriginal();
- if (original instanceof HttpUriRequest && ((HttpUriRequest) original).isAborted()) {
+ if (execAware != null && execAware.isAborted()) {
this.log.debug("Request has been aborted");
throw ex;
}
@@ -100,7 +97,7 @@ public class RetryExec implements Client
if (this.log.isDebugEnabled()) {
this.log.debug(ex.getMessage(), ex);
}
- if (!request.isRepeatable()) {
+ if (!ExecProxies.isRepeatable(request)) {
this.log.debug("Cannot retry non-repeatable request");
throw new NonRepeatableRequestException("Cannot retry request " +
"with a non-repeatable request entity", ex);
Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestClientAuthentication.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestClientAuthentication.java?rev=1416177&r1=1416176&r2=1416177&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestClientAuthentication.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestClientAuthentication.java Sun Dec 2 14:03:52 2012
@@ -259,7 +259,7 @@ public class TestClientAuthentication ex
this.localServer.register("*", new AuthHandler());
TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test"));
+ new UsernamePasswordCredentials("test", "boom"));
this.httpclient = HttpClients.custom().setCredentialsProvider(credsProvider).build();