This commit is contained in:
Giampaolo 2025-07-01 19:43:35 +02:00 committed by GitHub
commit ef156e8c8c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 7 additions and 1 deletions

View File

@ -96,12 +96,13 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
@Override
protected ClientHttpResponse executeInternal(HttpHeaders headers, @Nullable Body body) throws IOException {
CompletableFuture<HttpResponse<InputStream>> responseFuture = null;
TimeoutHandler timeoutHandler = null;
try {
HttpRequest request = buildRequest(headers, body);
responseFuture = this.httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream());
if (this.timeout != null) {
TimeoutHandler timeoutHandler = new TimeoutHandler(responseFuture, this.timeout);
timeoutHandler = new TimeoutHandler(responseFuture, this.timeout);
HttpResponse<InputStream> response = responseFuture.get();
InputStream inputStream = timeoutHandler.wrapInputStream(response);
return new JdkClientHttpResponse(response, inputStream);
@ -136,6 +137,9 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
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) {
@ -233,6 +237,7 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
private static final class TimeoutHandler {
private final CompletableFuture<Void> timeoutFuture;
private boolean isTimeout=false;
private TimeoutHandler(CompletableFuture<HttpResponse<InputStream>> future, Duration timeout) {
@ -241,6 +246,7 @@ class JdkClientHttpRequest extends AbstractStreamingClientHttpRequest {
this.timeoutFuture.thenRun(() -> {
if (future.cancel(true) || future.isCompletedExceptionally() || !future.isDone()) {
this.isTimeout = true;
return;
}
try {