public Java11ReactiveHttpClientFactory( HttpClient httpClient, JsonFactory jsonFactory, ObjectMapper objectMapper, Java11ReactiveOptions options) { this.httpClient = httpClient; this.jsonFactory = jsonFactory; this.objectMapper = objectMapper; this.options = options; if(useHttp2(options) && HttpClient.Version.HTTP_2 != httpClient.version()){ throw new IllegalArgumentException("Set correct version to httpClient"); } }
@Override public void target(Target target) { if(httpClient.version() == HttpClient.Version.HTTP_2){ //preliminary upgrade to h2s and setup TCP connection upgradeToH2c(target); } }
@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); }