@@ -64,13 +64,16 @@ private WebServiceClient(WebServiceClient.Builder builder) {
6464 .getBytes (StandardCharsets .UTF_8 ));
6565
6666 requestTimeout = builder .requestTimeout ;
67- HttpClient .Builder httpClientBuilder = HttpClient .newBuilder ()
68- .proxy (builder .proxy );
69- if (builder .connectTimeout != null ) {
70- httpClientBuilder .connectTimeout (builder .connectTimeout );
67+ if (builder .httpClient != null ) {
68+ httpClient = builder .httpClient ;
69+ } else {
70+ HttpClient .Builder httpClientBuilder = HttpClient .newBuilder ()
71+ .proxy (builder .proxy );
72+ if (builder .connectTimeout != null ) {
73+ httpClientBuilder .connectTimeout (builder .connectTimeout );
74+ }
75+ httpClient = httpClientBuilder .build ();
7176 }
72- httpClient = httpClientBuilder .build ();
73-
7477 }
7578
7679 /**
@@ -102,7 +105,8 @@ public static final class Builder {
102105 Duration requestTimeout ;
103106
104107 List <String > locales = Collections .singletonList ("en" );
105- private ProxySelector proxy = ProxySelector .getDefault ();
108+ private ProxySelector proxy ;
109+ private HttpClient httpClient ;
106110
107111 /**
108112 * @param accountId Your MaxMind account ID.
@@ -188,12 +192,38 @@ public Builder proxy(ProxySelector val) {
188192 return this ;
189193 }
190194
195+ /**
196+ * @param val the HttpClient to use when making requests. When provided,
197+ * connectTimeout and proxy settings will be ignored as the
198+ * custom client should handle these configurations.
199+ * @return Builder object
200+ */
201+ public Builder httpClient (HttpClient val ) {
202+ httpClient = val ;
203+ return this ;
204+ }
191205
192206 /**
193207 * @return an instance of {@code WebServiceClient} created from the fields set on this
194208 * builder.
195209 */
196210 public WebServiceClient build () {
211+ if (httpClient != null ) {
212+ if (connectTimeout != null ) {
213+ throw new IllegalArgumentException (
214+ "Cannot set both httpClient and connectTimeout. "
215+ + "Configure timeouts on the provided HttpClient instead." );
216+ }
217+ if (proxy != null ) {
218+ throw new IllegalArgumentException (
219+ "Cannot set both httpClient and proxy. "
220+ + "Configure proxy on the provided HttpClient instead." );
221+ }
222+ } else {
223+ if (proxy == null ) {
224+ proxy = ProxySelector .getDefault ();
225+ }
226+ }
197227 return new WebServiceClient (this );
198228 }
199229 }
0 commit comments