@@ -96,12 +96,13 @@ public URI getURI() {
96
96
@ Override
97
97
protected ClientHttpResponse executeInternal (HttpHeaders headers , @ Nullable Body body ) throws IOException {
98
98
CompletableFuture <HttpResponse <InputStream >> responseFuture = null ;
99
+ TimeoutHandler timeoutHandler = null ;
99
100
try {
100
101
HttpRequest request = buildRequest (headers , body );
101
102
responseFuture = this .httpClient .sendAsync (request , HttpResponse .BodyHandlers .ofInputStream ());
102
103
103
104
if (this .timeout != null ) {
104
- TimeoutHandler timeoutHandler = new TimeoutHandler (responseFuture , this .timeout );
105
+ timeoutHandler = new TimeoutHandler (responseFuture , this .timeout );
105
106
HttpResponse <InputStream > response = responseFuture .get ();
106
107
InputStream inputStream = timeoutHandler .wrapInputStream (response );
107
108
return new JdkClientHttpResponse (response , inputStream );
@@ -136,6 +137,9 @@ else if (cause instanceof IOException ioEx) {
136
137
throw (message == null ? new IOException (cause ) : new IOException (message , cause ));
137
138
}
138
139
}
140
+ catch (CancellationException ex ) {
141
+ throw new HttpTimeoutException ("Request timed out" );
142
+ }
139
143
}
140
144
141
145
private HttpRequest buildRequest (HttpHeaders headers , @ Nullable Body body ) {
@@ -224,6 +228,7 @@ public ByteBuffer map(byte[] b, int off, int len) {
224
228
private static final class TimeoutHandler {
225
229
226
230
private final CompletableFuture <Void > timeoutFuture ;
231
+ private boolean isTimeout =false ;
227
232
228
233
private TimeoutHandler (CompletableFuture <HttpResponse <InputStream >> future , Duration timeout ) {
229
234
@@ -232,6 +237,7 @@ private TimeoutHandler(CompletableFuture<HttpResponse<InputStream>> future, Dura
232
237
233
238
this .timeoutFuture .thenRun (() -> {
234
239
if (future .cancel (true ) || future .isCompletedExceptionally () || !future .isDone ()) {
240
+ this .isTimeout = true ;
235
241
return ;
236
242
}
237
243
try {
@@ -242,6 +248,8 @@ private TimeoutHandler(CompletableFuture<HttpResponse<InputStream>> future, Dura
242
248
}
243
249
});
244
250
251
+
252
+
245
253
}
246
254
247
255
public @ Nullable InputStream wrapInputStream (HttpResponse <InputStream > response ) {
0 commit comments