diff --git a/src/main/java/com/chavaillaz/client/common/apache/AbstractApacheHttpClient.java b/src/main/java/com/chavaillaz/client/common/apache/AbstractApacheHttpClient.java index 529583e..ad364af 100644 --- a/src/main/java/com/chavaillaz/client/common/apache/AbstractApacheHttpClient.java +++ b/src/main/java/com/chavaillaz/client/common/apache/AbstractApacheHttpClient.java @@ -13,7 +13,6 @@ import com.chavaillaz.client.common.security.Authentication; import com.fasterxml.jackson.databind.JavaType; import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; import org.apache.hc.client5.http.async.methods.SimpleHttpRequest; import org.apache.hc.client5.http.async.methods.SimpleHttpResponse; import org.apache.hc.client5.http.async.methods.SimpleRequestBuilder; @@ -29,7 +28,6 @@ /** * Abstract class implementing common parts for Apache HTTP. */ -@Slf4j public class AbstractApacheHttpClient extends AbstractHttpClient implements AutoCloseable { protected final CloseableHttpAsyncClient client; @@ -83,10 +81,8 @@ protected CompletableFuture sendAsync(SimpleRequestBuilder requestBuilder * @return A {@link CompletableFuture} with the deserialized domain object */ protected CompletableFuture sendAsync(SimpleRequestBuilder requestBuilder, JavaType returnType) { - SimpleHttpRequest request = requestBuilder.build(); - CompletableFuture completableFuture = new CompletableFuture<>(); - client.execute(request, createContext(), new CompletableFutureCallback(this, request, completableFuture)); - return completableFuture.thenApply(SimpleHttpResponse::getBodyText) + return sendAsyncBase(requestBuilder) + .thenApply(SimpleHttpResponse::getBodyText) .thenApply(body -> deserialize(body, returnType)); } @@ -97,11 +93,22 @@ protected CompletableFuture sendAsync(SimpleRequestBuilder requestBuilder * @return A {@link CompletableFuture} with the input stream */ protected CompletableFuture sendAsync(SimpleRequestBuilder requestBuilder) { + return sendAsyncBase(requestBuilder) + .thenApply(SimpleHttpResponse::getBodyBytes) + .thenApply(ByteArrayInputStream::new); + } + + /** + * Sends a request and returns the corresponding response. + * + * @param requestBuilder The request builder + * @return A {@link CompletableFuture} with the response + */ + protected CompletableFuture sendAsyncBase(SimpleRequestBuilder requestBuilder) { SimpleHttpRequest request = requestBuilder.build(); CompletableFuture completableFuture = new CompletableFuture<>(); client.execute(request, createContext(), new CompletableFutureCallback(this, request, completableFuture)); - return completableFuture.thenApply(SimpleHttpResponse::getBodyBytes) - .thenApply(ByteArrayInputStream::new); + return completableFuture; } /** diff --git a/src/main/java/com/chavaillaz/client/common/okhttp/AbstractOkHttpClient.java b/src/main/java/com/chavaillaz/client/common/okhttp/AbstractOkHttpClient.java index 8bf40da..7bab686 100644 --- a/src/main/java/com/chavaillaz/client/common/okhttp/AbstractOkHttpClient.java +++ b/src/main/java/com/chavaillaz/client/common/okhttp/AbstractOkHttpClient.java @@ -10,7 +10,6 @@ import com.chavaillaz.client.common.security.Authentication; import com.fasterxml.jackson.databind.JavaType; import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -21,7 +20,6 @@ /** * Abstract class implementing common parts for OkHttp. */ -@Slf4j public class AbstractOkHttpClient extends AbstractHttpClient implements AutoCloseable { public static final MediaType MEDIA_TYPE_JSON = MediaType.parse(HEADER_CONTENT_JSON); @@ -96,9 +94,8 @@ protected CompletableFuture sendAsync(Request.Builder requestBuilder, Cla * @return A {@link CompletableFuture} with the deserialized domain object */ protected CompletableFuture sendAsync(Request.Builder requestBuilder, JavaType returnType) { - CompletableFuture completableFuture = new CompletableFuture<>(); - client.newCall(requestBuilder.build()).enqueue(new CompletableFutureCallback(this, completableFuture)); - return completableFuture.thenApply(response -> handleResponse(response, returnType)); + return sendAsyncBase(requestBuilder) + .thenApply(response -> handleResponse(response, returnType)); } /** @@ -108,10 +105,21 @@ protected CompletableFuture sendAsync(Request.Builder requestBuilder, Jav * @return A {@link CompletableFuture} with the input stream */ protected CompletableFuture sendAsync(Request.Builder requestBuilder) { + return sendAsyncBase(requestBuilder) + .thenApply(Response::body) + .thenApply(ResponseBody::byteStream); + } + + /** + * Sends a request and returns the corresponding response. + * + * @param requestBuilder The request builder + * @return A {@link CompletableFuture} with the response + */ + protected CompletableFuture sendAsyncBase(Request.Builder requestBuilder) { CompletableFuture completableFuture = new CompletableFuture<>(); client.newCall(requestBuilder.build()).enqueue(new CompletableFutureCallback(this, completableFuture)); - return completableFuture.thenApply(Response::body) - .thenApply(ResponseBody::byteStream); + return completableFuture; } /** diff --git a/src/main/java/com/chavaillaz/client/common/vertx/AbstractVertxHttpClient.java b/src/main/java/com/chavaillaz/client/common/vertx/AbstractVertxHttpClient.java index 6523efe..0796aa4 100644 --- a/src/main/java/com/chavaillaz/client/common/vertx/AbstractVertxHttpClient.java +++ b/src/main/java/com/chavaillaz/client/common/vertx/AbstractVertxHttpClient.java @@ -14,12 +14,10 @@ import io.vertx.ext.web.client.HttpRequest; import io.vertx.ext.web.client.HttpResponse; import io.vertx.ext.web.client.WebClient; -import lombok.extern.slf4j.Slf4j; /** * Abstract class implementing common parts for Vert.x HTTP. */ -@Slf4j public class AbstractVertxHttpClient extends AbstractHttpClient implements AutoCloseable { protected WebClient client; @@ -83,10 +81,8 @@ protected CompletableFuture handleAsync(Future> futu * @return A {@link CompletableFuture} with the deserialized domain object */ protected CompletableFuture handleAsync(Future> future, JavaType returnType) { - CompletableFuture> completableFuture = new CompletableFuture<>(); - future.onSuccess(response -> handleResponse(response, completableFuture)) - .onFailure(completableFuture::completeExceptionally); - return completableFuture.thenApply(HttpResponse::bodyAsString) + return handleAsyncBase(future) + .thenApply(HttpResponse::bodyAsString) .thenApply(body -> deserialize(body, returnType)); } @@ -97,11 +93,22 @@ protected CompletableFuture handleAsync(Future> futu * @return A {@link CompletableFuture} with the input stream */ protected CompletableFuture handleAsync(Future> future) { + return handleAsyncBase(future) + .thenApply(HttpResponse::body) + .thenApply(VertxInputStream::new); + } + + /** + * Handles the request sent and returns the corresponding response buffer. + * + * @param future The future response + * @return A {@link CompletableFuture} with the response buffer + */ + protected CompletableFuture> handleAsyncBase(Future> future) { CompletableFuture> completableFuture = new CompletableFuture<>(); future.onSuccess(response -> handleResponse(response, completableFuture)) .onFailure(completableFuture::completeExceptionally); - return completableFuture.thenApply(HttpResponse::body) - .thenApply(VertxInputStream::new); + return completableFuture; } /**