Skip to content

Commit a12e0dc

Browse files
authored
feat: add proxy support (#143)
Adds proxy configuration support in Java SDK using OkHttpClient, allowing users to set proxy server, port, and authentication through SDK Client.
1 parent b924c59 commit a12e0dc

File tree

3 files changed

+190
-11
lines changed

3 files changed

+190
-11
lines changed

README.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,20 @@ Core lib's Maven group ID is `io.apimatic`, and its artifact ID is `core`.
4949
| [`Or`](./src/main/java/io/apimatic/core/authentication/multiple/Or.java) | A class to hold the algorithm for `Or` combination of auth schemes |
5050
| [`Single`](./src/main/java/io/apimatic/core/authentication/multiple/Single.java) | A class to hold the logic for single auth scheme, it is used as leaf node for auth combination or it could be used directly to apply one auth only to the http request |
5151
| [`CoreHttpClientConfiguration`](./src/main/java/io/apimatic/core/configurations/http/client/CoreHttpClientConfiguration.java) | To hold HTTP Client Configuration |
52+
| [`CoreProxyConfiguration`](./src/main/java/io/apimatic/core/configurations/http/client/CoreProxyConfiguration.java) | To hold the Proxy configuration for the underlying HTTP client instance. |
5253
| [`EndpointConfiguration`](./src/main/java/io/apimatic/core/configurations/http/request/EndpointConfiguration.java) | The configuration for an endpoint |
5354
| [`AsyncExecutor`](./src/main/java/io/apimatic/core/request/async/AsyncExecutor.java) | Executor service for asynchronous HTTP endpoint call |
5455
| [`OptionalNullable`](./src/main/java/io/apimatic/core/types/OptionalNullable.java) | Class to encapsulate fields which are Optional as well as Nullable |
5556
| [`BaseModel`](./src/main/java/io/apimatic/core/types/BaseModel.java) | Base model for all the models |
5657
| [`CoreApiException`](./src/main/java/io/apimatic/core/types/CoreApiException.java) | This is the base class for all exceptions that represent an error response from the server |
5758
| [`MultipartFileWrapper`](./src/main/java/io/apimatic/core/types/http/request/MultipartFileWrapper.java) | To wrap file and headers to be sent as part of a multipart request |
5859
| [`MultipartWrapper`](./src/main/java/io/apimatic/core/types/http/request/MultipartWrapper.java) | To wrap byteArray and headers to be sent as part of a multipart request |
59-
| [`PaginatedData`](./src/main/java/io/apimatic/core/types/pagination/PaginatedData.java) | To provide pagination functionality for both synchronous and asynchronous pagination types |
60-
| [`PageWrapper`](./src/main/java/io/apimatic/core/types/pagination/PageWrapper.java) | To wrap a single page along with its items and meta-data in the paginated data |
61-
| [`CursorPagination`](./src/main/java/io/apimatic/core/types/pagination/CursorPagination.java) | Provides cursor based pagination strategy |
62-
| [`LinkPagination`](./src/main/java/io/apimatic/core/types/pagination/LinkPagination.java) | Provides link based pagination strategy |
63-
| [`OffsetPagination`](./src/main/java/io/apimatic/core/types/pagination/OffsetPagination.java) | Provides offset based pagination strategy |
64-
| [`PagePagination`](./src/main/java/io/apimatic/core/types/pagination/PagePagination.java) | Provides page based pagination strategy |
60+
| [`PaginatedData`](./src/main/java/io/apimatic/core/types/pagination/PaginatedData.java) | To provide pagination functionality for both synchronous and asynchronous pagination types |
61+
| [`PageWrapper`](./src/main/java/io/apimatic/core/types/pagination/PageWrapper.java) | To wrap a single page along with its items and meta-data in the paginated data |
62+
| [`CursorPagination`](./src/main/java/io/apimatic/core/types/pagination/CursorPagination.java) | Provides cursor based pagination strategy |
63+
| [`LinkPagination`](./src/main/java/io/apimatic/core/types/pagination/LinkPagination.java) | Provides link based pagination strategy |
64+
| [`OffsetPagination`](./src/main/java/io/apimatic/core/types/pagination/OffsetPagination.java) | Provides offset based pagination strategy |
65+
| [`PagePagination`](./src/main/java/io/apimatic/core/types/pagination/PagePagination.java) | Provides page based pagination strategy |
6566
| [`CoreHelper`](./src/main/java/io/apimatic/core/utilities/CoreHelper.java) | This is a Helper class with commonly used utilities for the SDK |
6667
| [`DateHelper`](./src/main/java/io/apimatic/core/utilities/DateHelper.java) | This is a utility class for LocalDate operations |
6768
| [`LocalDateTimeHelper`](./src/main/java/io/apimatic/core/utilities/LocalDateTimeHelper.java) | This is a utility class for LocalDateTime operations |
@@ -72,7 +73,7 @@ Core lib's Maven group ID is `io.apimatic`, and its artifact ID is `core`.
7273
| [`CoreJsonObject`](./src/main/java/io/apimatic/core/utilities/CoreJsonObject.java) | Wrapper class for JSON object |
7374
| [`CoreJsonValue`](./src/main/java/io/apimatic/core/utilities/CoreJsonValue.java) | Wrapper class for JSON value |
7475
| [`TestHelper`](./src/main/java/io/apimatic/core/utilities/TestHelper.java) | Contains utility methods for comparing objects, arrays and files |
75-
| [`AdditionalProperties`](./src/main/java/io/apimatic/core/types/AdditionalProperties.java) | A generic class for managing additional properties in a model. |
76+
| [`AdditionalProperties`](./src/main/java/io/apimatic/core/types/AdditionalProperties.java) | A generic class for managing additional properties in a model. |
7677
| [`ConversionHelper`](./src/main/java/io/apimatic/core/utilities/ConversionHelper.java) | A Helper class for the coversion of type (provided as function) for all structures (array, map, array of map, n-dimensional arrays etc) supported in the SDK. |
7778

7879
## Interfaces

src/main/java/io/apimatic/core/configurations/http/client/CoreHttpClientConfiguration.java

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.apimatic.core.configurations.http.client;
22

3+
import io.apimatic.coreinterfaces.http.proxy.ProxyConfiguration;
34
import java.util.Arrays;
45
import java.util.HashSet;
56
import java.util.Set;
@@ -122,6 +123,12 @@ public final class CoreHttpClientConfiguration implements ClientConfiguration {
122123
*/
123124
private final boolean skipSslCertVerification;
124125

126+
/**
127+
* The proxy configuration used to route network requests through a proxy server.
128+
* Contains details such as address, port, and optional authentication credentials.
129+
*/
130+
private final ProxyConfiguration proxyConfiguration;
131+
125132
/**
126133
* @param timeout
127134
* @param numberOfRetries
@@ -134,13 +141,15 @@ public final class CoreHttpClientConfiguration implements ClientConfiguration {
134141
* @param shouldRetryOnTimeout
135142
* @param httpClientInstance
136143
* @param overrideHttpClientConfigurations
144+
* @param proxyConfiguration
137145
*/
138146
private CoreHttpClientConfiguration(final long timeout, final int numberOfRetries,
139147
final int backOffFactor, final long retryInterval,
140148
final boolean skipSslCertVerification, final Set<Integer> httpStatusCodesToRetry,
141149
final Set<Method> httpMethodsToRetry, final long maximumRetryWaitTime,
142150
final boolean shouldRetryOnTimeout, final okhttp3.OkHttpClient httpClientInstance,
143-
final boolean overrideHttpClientConfigurations) {
151+
final boolean overrideHttpClientConfigurations,
152+
final ProxyConfiguration proxyConfiguration) {
144153
this.timeout = timeout;
145154
this.numberOfRetries = numberOfRetries;
146155
this.backOffFactor = backOffFactor;
@@ -152,6 +161,7 @@ private CoreHttpClientConfiguration(final long timeout, final int numberOfRetrie
152161
this.httpClientInstance = httpClientInstance;
153162
this.overrideHttpClientConfigurations = overrideHttpClientConfigurations;
154163
this.skipSslCertVerification = skipSslCertVerification;
164+
this.proxyConfiguration = proxyConfiguration;
155165
}
156166

157167
/**
@@ -243,6 +253,15 @@ public boolean skipSslCertVerification() {
243253
return skipSslCertVerification;
244254
}
245255

256+
/**
257+
* Returns the proxy configuration used to route requests through a proxy server.
258+
* This includes the proxy address, port, and any authentication credentials.
259+
* @return the {@link ProxyConfiguration}
260+
*/
261+
public ProxyConfiguration getProxyConfiguration() {
262+
return proxyConfiguration;
263+
}
264+
246265
/**
247266
* Converts this HttpClientConfiguration into string format.
248267
* @return String representation of this class.
@@ -255,7 +274,8 @@ public String toString() {
255274
+ ", httpMethodsToRetry=" + httpMethodsToRetry + ", maximumRetryWaitTime="
256275
+ maximumRetryWaitTime + ", shouldRetryOnTimeout=" + shouldRetryOnTimeout
257276
+ ", httpClientInstance=" + httpClientInstance
258-
+ ", overrideHttpClientConfigurations=" + overrideHttpClientConfigurations + "]";
277+
+ ", overrideHttpClientConfigurations=" + overrideHttpClientConfigurations
278+
+ ", proxyConfiguration=" + proxyConfiguration + "]";
259279
}
260280

261281
/**
@@ -269,7 +289,8 @@ public Builder newBuilder() {
269289
.httpStatusCodesToRetry(httpStatusCodesToRetry)
270290
.httpMethodsToRetry(httpMethodsToRetry).maximumRetryWaitTime(maximumRetryWaitTime)
271291
.shouldRetryOnTimeout(shouldRetryOnTimeout)
272-
.httpClientInstance(httpClientInstance, overrideHttpClientConfigurations);
292+
.httpClientInstance(httpClientInstance, overrideHttpClientConfigurations)
293+
.proxyConfiguration(proxyConfiguration);
273294
}
274295

275296
/**
@@ -322,6 +343,11 @@ public static class Builder {
322343
* Skip Ssl certification.
323344
*/
324345
private boolean skipSslCertVerification;
346+
/**
347+
* The proxy configuration used to route network requests through a proxy server.
348+
* Contains details such as address, port, and optional authentication credentials.
349+
*/
350+
private ProxyConfiguration proxyConfiguration;
325351

326352
/**
327353
* Default Constructor to initiate builder with default properties.
@@ -463,6 +489,17 @@ public Builder skipSslCertVerification(boolean skipSslCertVerification) {
463489
return this;
464490
}
465491

492+
/**
493+
* Sets the proxy configuration to be used for routing requests through a proxy server.
494+
*
495+
* @param proxyConfiguration the {@link ProxyConfiguration} instance to use
496+
* @return the builder instance
497+
*/
498+
public Builder proxyConfiguration(ProxyConfiguration proxyConfiguration) {
499+
this.proxyConfiguration = proxyConfiguration;
500+
return this;
501+
}
502+
466503
/**
467504
* Builds a new HttpClientConfiguration object using the set fields.
468505
* @return {@link CoreHttpClientConfiguration}.
@@ -471,7 +508,7 @@ public CoreHttpClientConfiguration build() {
471508
return new CoreHttpClientConfiguration(timeout, numberOfRetries, backOffFactor,
472509
retryInterval, skipSslCertVerification, httpStatusCodesToRetry,
473510
httpMethodsToRetry, maximumRetryWaitTime, shouldRetryOnTimeout,
474-
httpClientInstance, overrideHttpClientConfigurations);
511+
httpClientInstance, overrideHttpClientConfigurations, proxyConfiguration);
475512
}
476513
}
477514
}

0 commit comments

Comments
 (0)