From d6c5b8250e134ed9e0d3cc9dd5e097919496d4eb Mon Sep 17 00:00:00 2001 From: Carlos Tribiec Date: Tue, 30 Jul 2024 09:29:29 -0400 Subject: [PATCH 1/8] feat: add default request timeout constant --- src/main/java/cl/transbank/common/ApiConstants.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/cl/transbank/common/ApiConstants.java b/src/main/java/cl/transbank/common/ApiConstants.java index 877afea..146c649 100644 --- a/src/main/java/cl/transbank/common/ApiConstants.java +++ b/src/main/java/cl/transbank/common/ApiConstants.java @@ -26,6 +26,7 @@ public class ApiConstants { public static final int EMAIL_LENGTH = 100; public static final String TOKEN_TEXT = "token"; public static final String BUY_ORDER_TEXT = "buyOrder"; + public static final int REQUEST_TIMEOUT = 30000; /** * Private constructor to prevent instantiation. From 50c2e70efd2f2c79ecdf544709808d90e9354ab4 Mon Sep 17 00:00:00 2001 From: Carlos Tribiec Date: Tue, 30 Jul 2024 09:29:44 -0400 Subject: [PATCH 2/8] feat: add timeout option to Options class constructor --- src/main/java/cl/transbank/model/Options.java | 45 ++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/main/java/cl/transbank/model/Options.java b/src/main/java/cl/transbank/model/Options.java index f784e09..664b60c 100644 --- a/src/main/java/cl/transbank/model/Options.java +++ b/src/main/java/cl/transbank/model/Options.java @@ -1,13 +1,12 @@ package cl.transbank.model; +import cl.transbank.common.ApiConstants; import cl.transbank.common.IntegrationType; import lombok.*; /** * This abstract class represents the options that can be set for a transaction. */ -@NoArgsConstructor -@AllArgsConstructor public abstract class Options implements Cloneable { @Setter @@ -22,6 +21,46 @@ public abstract class Options implements Cloneable { @Getter private IntegrationType integrationType; + @Setter + @Getter + private int timeout; + + /** + * Constructs a new Options with the specified commerce code, API key, and integration type. + * @param commerceCode The commerce code. + * @param apiKey The API key. + * @param integrationType The integration type. + */ + protected Options( + String commerceCode, + String apiKey, + IntegrationType integrationType + ) { + this.commerceCode = commerceCode; + this.apiKey = apiKey; + this.integrationType = integrationType; + this.timeout = ApiConstants.REQUEST_TIMEOUT; + } + + /** + * Constructs a new Options with the specified commerce code, API key, integration type, and timeout. + * @param commerceCode The commerce code. + * @param apiKey The API key. + * @param integrationType The integration type. + * @param timeout The time in ms to wait for a response. + */ + protected Options( + String commerceCode, + String apiKey, + IntegrationType integrationType, + int timeout + ) { + this.commerceCode = commerceCode; + this.apiKey = apiKey; + this.integrationType = integrationType; + this.timeout = timeout; + } + /** * Builds the options for a transaction. * @param options The options to set. @@ -44,6 +83,8 @@ public Options buildOptions(Options options) { if (null != options.getIntegrationType()) alt.setIntegrationType( options.getIntegrationType() ); + + alt.setTimeout(options.getTimeout()); } return alt; From ba41fce77498daa1bb6e56071768b96636fe7b0f Mon Sep 17 00:00:00 2001 From: Carlos Tribiec Date: Tue, 30 Jul 2024 09:29:58 -0400 Subject: [PATCH 3/8] feat: add new constructor to PatpassOptions class with timeout parameter --- .../transbank/patpass/model/PatpassOptions.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/cl/transbank/patpass/model/PatpassOptions.java b/src/main/java/cl/transbank/patpass/model/PatpassOptions.java index 3d3c6a4..9c0e152 100644 --- a/src/main/java/cl/transbank/patpass/model/PatpassOptions.java +++ b/src/main/java/cl/transbank/patpass/model/PatpassOptions.java @@ -8,7 +8,6 @@ * This class represents the options for a Patpass transaction. */ @ToString -@AllArgsConstructor public class PatpassOptions extends Options { /** @@ -24,4 +23,20 @@ public PatpassOptions( ) { super(commerceCode, apiKey, integrationType); } + + /** + * Constructs a new PatpassOptions with the specified commerce code, API key, and integration type. + * @param commerceCode The commerce code. + * @param apiKey The API key. + * @param integrationType The integration type. + * @param timeout The time in ms to wait for a response. + */ + public PatpassOptions( + String commerceCode, + String apiKey, + IntegrationType integrationType, + int timeout + ) { + super(commerceCode, apiKey, integrationType, timeout); + } } From d25834aab8125534a8abc303ce03b6d78ed97586 Mon Sep 17 00:00:00 2001 From: Carlos Tribiec Date: Tue, 30 Jul 2024 09:30:12 -0400 Subject: [PATCH 4/8] feat: add setConnectTimeout and setReadTimeout methods to HttpUtil interface --- src/main/java/cl/transbank/util/HttpUtil.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/cl/transbank/util/HttpUtil.java b/src/main/java/cl/transbank/util/HttpUtil.java index e906cff..5cbedf5 100644 --- a/src/main/java/cl/transbank/util/HttpUtil.java +++ b/src/main/java/cl/transbank/util/HttpUtil.java @@ -63,4 +63,8 @@ enum RequestMethod { DELETE, PUT, } + + public void setConnectTimeout(int connectTimeout); + + public void setReadTimeout(int readTimeout); } From a45b868d32faf05732831249e0c9b97b0b397ae8 Mon Sep 17 00:00:00 2001 From: Carlos Tribiec Date: Tue, 30 Jul 2024 09:31:02 -0400 Subject: [PATCH 5/8] feat: add setConnectTimeout and setReadTimeout methods to HttpUtilImpl --- .../java/cl/transbank/util/HttpUtilImpl.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/cl/transbank/util/HttpUtilImpl.java b/src/main/java/cl/transbank/util/HttpUtilImpl.java index 0cc56f5..ea1a811 100644 --- a/src/main/java/cl/transbank/util/HttpUtilImpl.java +++ b/src/main/java/cl/transbank/util/HttpUtilImpl.java @@ -2,6 +2,7 @@ import static cl.transbank.util.HttpUtil.RequestMethod.*; +import cl.transbank.common.ApiConstants; import cl.transbank.webpay.exception.TransbankHttpApiException; import cl.transbank.webpay.exception.WebpayException; import java.io.*; @@ -34,6 +35,17 @@ public class HttpUtilImpl implements HttpUtil { @Getter(AccessLevel.PRIVATE) private JsonUtil jsonUtil = JsonUtilImpl.getInstance(); + private int connectTimeout = ApiConstants.REQUEST_TIMEOUT; + private int readTimeout = ApiConstants.REQUEST_TIMEOUT; + + public void setConnectTimeout(int connectTimeout) { + this.connectTimeout = connectTimeout; + } + + public void setReadTimeout(int readTimeout) { + this.readTimeout = readTimeout; + } + /** * Sends a HTTP request and returns the response. * This method uses the provided URL, request method, request body, headers, and response type to send the request. @@ -264,6 +276,9 @@ private HttpURLConnection createGETConnection( } } + conn.setConnectTimeout(connectTimeout); + conn.setReadTimeout(readTimeout); + return conn; } @@ -315,6 +330,8 @@ private HttpURLConnection createSendingDataConnection( StandardCharsets.UTF_8.name().toLowerCase() ) ); + conn.setConnectTimeout(connectTimeout); + conn.setReadTimeout(readTimeout); if (null != headers) { for (Map.Entry header : headers.entrySet()) { From 1d11d6f64ba6c6eac8b71d8c91938524311d7669 Mon Sep 17 00:00:00 2001 From: Carlos Tribiec Date: Tue, 30 Jul 2024 09:33:59 -0400 Subject: [PATCH 6/8] refactor: update WebpayApiResource to use new timeout options --- .../cl/transbank/util/WebpayApiResource.java | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/main/java/cl/transbank/util/WebpayApiResource.java b/src/main/java/cl/transbank/util/WebpayApiResource.java index 4a7f562..54f1056 100644 --- a/src/main/java/cl/transbank/util/WebpayApiResource.java +++ b/src/main/java/cl/transbank/util/WebpayApiResource.java @@ -115,15 +115,18 @@ public static T execute( } final URL url = new URL(String.format("%s/%s", urlBase, endpoint)); - final T out = WebpayApiResource - .getHttpUtil() - .request( - url, - method, - request, - WebpayApiResource.buildHeaders(options), - clazz - ); + HttpUtil requestInstance = WebpayApiResource.getHttpUtil(); + + requestInstance.setConnectTimeout(options.getTimeout()); + requestInstance.setReadTimeout(options.getTimeout()); + + final T out = requestInstance.request( + url, + method, + request, + WebpayApiResource.buildHeaders(options), + clazz + ); if (null == out) return null; @@ -185,15 +188,18 @@ public static List executeToList( } final URL url = new URL(String.format("%s/%s", urlBase, endpoint)); - final List out = WebpayApiResource - .getHttpUtil() - .requestList( - url, - method, - request, - WebpayApiResource.buildHeaders(options), - clazz - ); + HttpUtil requestInstance = WebpayApiResource.getHttpUtil(); + + requestInstance.setConnectTimeout(options.getTimeout()); + requestInstance.setReadTimeout(options.getTimeout()); + + final List out = requestInstance.requestList( + url, + method, + request, + WebpayApiResource.buildHeaders(options), + clazz + ); if (null == out) return Collections.emptyList(); From 972c22b31aef9d97ee1215b599696761135e6b18 Mon Sep 17 00:00:00 2001 From: Carlos Tribiec Date: Tue, 30 Jul 2024 09:34:12 -0400 Subject: [PATCH 7/8] feat: Add timeout option to WebpayOptions constructor --- .../transbank/webpay/common/WebpayOptions.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/cl/transbank/webpay/common/WebpayOptions.java b/src/main/java/cl/transbank/webpay/common/WebpayOptions.java index e2ddfdf..7ad95ef 100644 --- a/src/main/java/cl/transbank/webpay/common/WebpayOptions.java +++ b/src/main/java/cl/transbank/webpay/common/WebpayOptions.java @@ -8,7 +8,6 @@ * This class represents the options for a Webpay transaction. */ @ToString -@AllArgsConstructor public class WebpayOptions extends Options { /** @@ -24,4 +23,20 @@ public WebpayOptions( ) { super(commerceCode, apiKey, integrationType); } + + /** + * Constructs a new WebpayOptions with the specified commerce code, API key, and integration type. + * @param commerceCode The commerce code. + * @param apiKey The API key. + * @param integrationType The integration type. + * @param timeout The time in ms to wait for a response. + */ + public WebpayOptions( + String commerceCode, + String apiKey, + IntegrationType integrationType, + int timeout + ) { + super(commerceCode, apiKey, integrationType, timeout); + } } From 4bbbe9172a7c035b7b6c590125172a113f4da3b6 Mon Sep 17 00:00:00 2001 From: Carlos Tribiec Date: Tue, 30 Jul 2024 10:26:23 -0400 Subject: [PATCH 8/8] refactor: update timeout default time Co-authored-by: Mauricio Astudillo --- src/main/java/cl/transbank/common/ApiConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cl/transbank/common/ApiConstants.java b/src/main/java/cl/transbank/common/ApiConstants.java index 146c649..3cac098 100644 --- a/src/main/java/cl/transbank/common/ApiConstants.java +++ b/src/main/java/cl/transbank/common/ApiConstants.java @@ -26,7 +26,7 @@ public class ApiConstants { public static final int EMAIL_LENGTH = 100; public static final String TOKEN_TEXT = "token"; public static final String BUY_ORDER_TEXT = "buyOrder"; - public static final int REQUEST_TIMEOUT = 30000; + public static final int REQUEST_TIMEOUT = 600000; /** * Private constructor to prevent instantiation.