Merge 1717ef715c
into b256babad5
This commit is contained in:
commit
ef156e8c8c
|
@ -96,12 +96,13 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
|
||||||
@Override
|
@Override
|
||||||
protected ClientHttpResponse executeInternal(HttpHeaders headers, @Nullable Body body) throws IOException {
|
protected ClientHttpResponse executeInternal(HttpHeaders headers, @Nullable Body body) throws IOException {
|
||||||
CompletableFuture<HttpResponse<InputStream>> responseFuture = null;
|
CompletableFuture<HttpResponse<InputStream>> responseFuture = null;
|
||||||
|
TimeoutHandler timeoutHandler = null;
|
||||||
try {
|
try {
|
||||||
HttpRequest request = buildRequest(headers, body);
|
HttpRequest request = buildRequest(headers, body);
|
||||||
responseFuture = this.httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream());
|
responseFuture = this.httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream());
|
||||||
|
|
||||||
if (this.timeout != null) {
|
if (this.timeout != null) {
|
||||||
TimeoutHandler timeoutHandler = new TimeoutHandler(responseFuture, this.timeout);
|
timeoutHandler = new TimeoutHandler(responseFuture, this.timeout);
|
||||||
HttpResponse<InputStream> response = responseFuture.get();
|
HttpResponse<InputStream> response = responseFuture.get();
|
||||||
InputStream inputStream = timeoutHandler.wrapInputStream(response);
|
InputStream inputStream = timeoutHandler.wrapInputStream(response);
|
||||||
return new JdkClientHttpResponse(response, inputStream);
|
return new JdkClientHttpResponse(response, inputStream);
|
||||||
|
@ -136,6 +137,9 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
|
||||||
throw (message == null ? new IOException(cause) : new IOException(message, cause));
|
throw (message == null ? new IOException(cause) : new IOException(message, cause));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (CancellationException ex) {
|
||||||
|
throw new HttpTimeoutException("Request timed out");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private HttpRequest buildRequest(HttpHeaders headers, @Nullable Body body) {
|
private HttpRequest buildRequest(HttpHeaders headers, @Nullable Body body) {
|
||||||
|
@ -233,6 +237,7 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
|
||||||
private static final class TimeoutHandler {
|
private static final class TimeoutHandler {
|
||||||
|
|
||||||
private final CompletableFuture<Void> timeoutFuture;
|
private final CompletableFuture<Void> timeoutFuture;
|
||||||
|
private boolean isTimeout=false;
|
||||||
|
|
||||||
private TimeoutHandler(CompletableFuture<HttpResponse<InputStream>> future, Duration timeout) {
|
private TimeoutHandler(CompletableFuture<HttpResponse<InputStream>> future, Duration timeout) {
|
||||||
|
|
||||||
|
@ -241,6 +246,7 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
|
||||||
|
|
||||||
this.timeoutFuture.thenRun(() -> {
|
this.timeoutFuture.thenRun(() -> {
|
||||||
if (future.cancel(true) || future.isCompletedExceptionally() || !future.isDone()) {
|
if (future.cancel(true) || future.isCompletedExceptionally() || !future.isDone()) {
|
||||||
|
this.isTimeout = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in New Issue