¿Cómo obtengo un CompletableFuture <T> de una solicitud Async Http Client?

EnDocumentación Async Http Client Veo como conseguir unFuture<Response> como resultado de una solicitud HTTP Get asincrónica simplemente haciendo, por ejemplo:

AsyncHttpClient asyncHttpClient = new DefaultAsyncHttpClient();
Future<Response> f = asyncHttpClient
      .prepareGet("http://api.football-data.org/v1/soccerseasons/398")
      .execute();
Response r = f.get();

Sin embargo, por conveniencia, me gustaría obtener unCompletableFuture<T> en cambio, para lo cual podría aplicar una continuación que convierta el resultado en otra cosa, por ejemplo, deserializar el contenido de respuesta de Json en un objeto Java (p. ej.SoccerSeason.java) Esto es lo que me gustaría hacer:

AsyncHttpClient asyncHttpClient = new DefaultAsyncHttpClient();
CompletableFuture<Response> f = asyncHttpClient
     .prepareGet("http://api.football-data.org/v1/soccerseasons/398")
     .execute();
f
     .thenApply(r -> gson.fromJson(r.getResponseBody(), SoccerSeason.class))
     .thenAccept(System.out::println);

De acuerdo aDocumentación Async Http Client la única forma de hacerlo es a través de unAsyncCompletionHandler<T> objetar y usar una promesa. Entonces construí unmétodo auxiliar Con ese fin:

CompletableFuture<Response> getDataAsync(String path){
    CompletableFuture<Response> promise = new CompletableFuture<>();
    asyncHttpClient
            .prepareGet(path)
            .execute(new AsyncCompletionHandler<Response>() {
                @Override
                public Response onCompleted(Response response) throws Exception {
                    promise.complete(response);
                    return response;
                }
                @Override
                public void onThrowable(Throwable t) {
                    promise.completeExceptionally(t);
                }
            });
    return promise;
}

Con este método de utilidad puedo reescribir el ejemplo anterior simplemente haciendo:

getDataAsync("http://api.football-data.org/v1/soccerseasons/398")
    .thenApply(r -> gson.fromJson(r.getResponseBody(), SoccerSeason.class))
    .thenAccept(System.out::println);

¿Hay alguna forma mejor de obtener unCompletableFuture<T> desde una solicitud Async Http Client?

Respuestas a la pregunta(1)

Su respuesta a la pregunta