@Override
public Mono<ReactiveHttpResponse> executeRequest(ReactiveHttpRequest request) {
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(request.uri())
.method(request.method().toUpperCase(), provideBody(request));
setUpHeaders(request, requestBuilder);
if(requestTimeout > 0){
requestBuilder = requestBuilder.timeout(Duration.ofMillis(requestTimeout));
}
if(tryUseCompression){
requestBuilder = requestBuilder.setHeader(ACCEPT_ENCODING_HEADER, GZIP);
}
Java11ReactiveHttpResponse.ReactiveBodySubscriber bodySubscriber = new Java11ReactiveHttpResponse.ReactiveBodySubscriber();
CompletableFuture<HttpResponse<Void>> response = httpClient.sendAsync(
requestBuilder.build(), fromSubscriber(bodySubscriber));
return Mono.fromFuture(response)
.<ReactiveHttpResponse>map(resp -> {
if(!resp.version().equals(httpClient.version())){
throw new IllegalArgumentException("Incorrect response version:"+resp.version());
}
return new Java11ReactiveHttpResponse(resp, bodySubscriber.content(),
returnPublisherClass, returnActualClass,
jsonFactory, responseReader);
})
.onErrorMap(ex -> ex instanceof CompletionException
&& ex.getCause() instanceof java.net.http.HttpTimeoutException,
ReadTimeoutException::new);
}