Skip to content

Commit 20097fb

Browse files
committed
WIP - Support cancelling in flight REST requests
Fixes: #41971
1 parent 96e2144 commit 20097fb

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

Diff for: independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/handlers/ClientSendRequestHandler.java

+2
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ public void handle(RestClientRequestContext requestContext) {
9898
future.subscribe().with(new Consumer<>() {
9999
@Override
100100
public void accept(HttpClientRequest httpClientRequest) {
101+
requestContext.setHttpClientRequest(httpClientRequest);
102+
101103
// adapt headers to HTTP/2 depending on the underlying HTTP connection
102104
ClientSendRequestHandler.this.adaptRequest(httpClientRequest);
103105

Diff for: independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/impl/UniInvoker.java

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.jboss.resteasy.reactive.client.impl;
22

3+
import java.util.concurrent.CompletableFuture;
34
import java.util.concurrent.CompletionStage;
5+
import java.util.concurrent.atomic.AtomicReference;
46
import java.util.function.Function;
57
import java.util.function.Supplier;
68

@@ -13,7 +15,7 @@
1315

1416
public class UniInvoker extends AbstractRxInvoker<Uni<?>> {
1517

16-
private InvocationBuilderImpl invocationBuilder;
18+
private final InvocationBuilderImpl invocationBuilder;
1719

1820
public UniInvoker(InvocationBuilderImpl invocationBuilder) {
1921
this.invocationBuilder = invocationBuilder;
@@ -22,10 +24,16 @@ public UniInvoker(InvocationBuilderImpl invocationBuilder) {
2224
@Override
2325
public <R> Uni<R> method(String name, Entity<?> entity, GenericType<R> responseType) {
2426
AsyncInvokerImpl invoker = (AsyncInvokerImpl) invocationBuilder.rx();
27+
AtomicReference<RestClientRequestContext> restClientRequestContextRef = new AtomicReference<>();
2528
return Uni.createFrom().completionStage(new Supplier<CompletionStage<R>>() {
2629
@Override
2730
public CompletionStage<R> get() {
28-
return invoker.method(name, entity, responseType);
31+
RestClientRequestContext restClientRequestContext = invoker.performRequestInternal(name, entity,
32+
responseType == null ? new GenericType<>(String.class) : responseType,
33+
true);
34+
restClientRequestContextRef.set(restClientRequestContext);
35+
CompletableFuture response = restClientRequestContext.getResult();
36+
return invoker.mapResponse(response, responseType == null ? String.class : responseType.getRawType());
2937
}
3038
}).onFailure().transform(new Function<>() {
3139
@Override
@@ -35,6 +43,11 @@ public Throwable apply(Throwable t) {
3543
}
3644
return t;
3745
}
46+
}).onCancellation().invoke(new Runnable() {
47+
@Override
48+
public void run() {
49+
restClientRequestContextRef.get().getHttpClientRequest().reset();
50+
}
3851
});
3952
}
4053

0 commit comments

Comments
 (0)