Make HttpComponentsAsyncClientHttpRequest abortable

This commit aborts the HttpComponentsAsyncClientHttpRequest whenever the
returned Future is canceled.

Issue: SPR-14845
This commit is contained in:
Arjen Poutsma
2016-10-28 14:18:46 +02:00
parent 7b469f9c62
commit 8f844461a0
2 changed files with 21 additions and 2 deletions

View File

@@ -92,7 +92,7 @@ final class HttpComponentsAsyncClientHttpRequest extends AbstractBufferingAsyncC
entityEnclosingRequest.setEntity(requestEntity);
}
final HttpResponseFutureCallback callback = new HttpResponseFutureCallback();
final HttpResponseFutureCallback callback = new HttpResponseFutureCallback(this.httpRequest);
final Future<HttpResponse> futureResponse =
this.httpClient.execute(this.httpRequest, this.httpContext, callback);
return new ClientHttpResponseFuture(futureResponse, callback);
@@ -104,6 +104,14 @@ final class HttpComponentsAsyncClientHttpRequest extends AbstractBufferingAsyncC
private final ListenableFutureCallbackRegistry<ClientHttpResponse> callbacks =
new ListenableFutureCallbackRegistry<>();
private final HttpUriRequest httpRequest;
public HttpResponseFutureCallback(HttpUriRequest httpRequest) {
this.httpRequest = httpRequest;
}
public void addCallback(ListenableFutureCallback<? super ClientHttpResponse> callback) {
this.callbacks.addCallback(callback);
}
@@ -128,6 +136,7 @@ final class HttpComponentsAsyncClientHttpRequest extends AbstractBufferingAsyncC
@Override
public void cancelled() {
this.httpRequest.abort();
}
}