@@ -75,6 +75,7 @@ public final class Rest5ClientBuilder {
7575
7676 private final List <Node > nodes ;
7777 private CloseableHttpAsyncClient httpClient ;
78+ private HttpClientConfigCallback httpClientConfigCallback ;
7879 private Header [] defaultHeaders = EMPTY_HEADERS ;
7980 private Rest5Client .FailureListener failureListener ;
8081 private SSLContext sslContext ;
@@ -320,6 +321,36 @@ public Rest5ClientBuilder setMetaHeaderEnabled(boolean metadataEnabled) {
320321 return this ;
321322 }
322323
324+ /**
325+ * Sets the {@link HttpClientConfigCallback} to be used to customize http client configuration
326+ *
327+ * @throws NullPointerException if {@code httpClientConfigCallback} is {@code null}.
328+ */
329+ public Rest5ClientBuilder setHttpClientConfigCallback (HttpClientConfigCallback httpClientConfigCallback ) {
330+ Objects .requireNonNull (httpClientConfigCallback , "httpClientConfigCallback must not be null" );
331+ this .httpClientConfigCallback = httpClientConfigCallback ;
332+ return this ;
333+ }
334+
335+ /**
336+ * Callback used to customize the {@link CloseableHttpAsyncClient} instance used by a
337+ * {@link Rest5Client} instance.
338+ * Allows to customize default {@link RequestConfig} being set to the client and any parameter that
339+ * can be set through {@link HttpAsyncClientBuilder}
340+ */
341+ public interface HttpClientConfigCallback {
342+ /**
343+ * Allows to customize the {@link CloseableHttpAsyncClient} being created and used by the
344+ * {@link Rest5Client}.
345+ * Commonly used to customize {@link HttpAsyncClientBuilder} without losing any other useful default
346+ * value that the {@link Rest5ClientBuilder} internally sets, except if RequestConfig,
347+ * ConnectionConfig
348+ * and ConnectionManager are set through this callback.
349+ * In those cases, all default values set by the {@link Rest5ClientBuilder} are lost.
350+ */
351+ HttpAsyncClientBuilder customizeHttpClient (HttpAsyncClientBuilder httpClientBuilder );
352+ }
353+
323354 /**
324355 * Creates a new {@link Rest5Client} based on the provided configuration.
325356 */
@@ -407,6 +438,9 @@ private CloseableHttpAsyncClient createHttpClient() {
407438 if (this .routePlanner != null ) {
408439 httpClientBuilder .setRoutePlanner (this .routePlanner );
409440 }
441+ if (httpClientConfigCallback != null ) {
442+ httpClientBuilder = httpClientConfigCallback .customizeHttpClient (httpClientBuilder );
443+ }
410444
411445 return httpClientBuilder .build ();
412446 } catch (NoSuchAlgorithmException e ) {
0 commit comments