Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add timeout param #194

Merged
merged 8 commits into from
Aug 2, 2024
1 change: 1 addition & 0 deletions src/main/java/cl/transbank/common/ApiConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 = 600000;

/**
* Private constructor to prevent instantiation.
Expand Down
45 changes: 43 additions & 2 deletions src/main/java/cl/transbank/model/Options.java
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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.
Expand All @@ -44,6 +83,8 @@ public Options buildOptions(Options options) {
if (null != options.getIntegrationType()) alt.setIntegrationType(
options.getIntegrationType()
);

alt.setTimeout(options.getTimeout());
}

return alt;
Expand Down
17 changes: 16 additions & 1 deletion src/main/java/cl/transbank/patpass/model/PatpassOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
* This class represents the options for a Patpass transaction.
*/
@ToString
@AllArgsConstructor
public class PatpassOptions extends Options {

/**
Expand All @@ -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);
}
}
4 changes: 4 additions & 0 deletions src/main/java/cl/transbank/util/HttpUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,8 @@ enum RequestMethod {
DELETE,
PUT,
}

public void setConnectTimeout(int connectTimeout);

public void setReadTimeout(int readTimeout);
}
17 changes: 17 additions & 0 deletions src/main/java/cl/transbank/util/HttpUtilImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -264,6 +276,9 @@ private HttpURLConnection createGETConnection(
}
}

conn.setConnectTimeout(connectTimeout);
conn.setReadTimeout(readTimeout);

return conn;
}

Expand Down Expand Up @@ -315,6 +330,8 @@ private HttpURLConnection createSendingDataConnection(
StandardCharsets.UTF_8.name().toLowerCase()
)
);
conn.setConnectTimeout(connectTimeout);
conn.setReadTimeout(readTimeout);

if (null != headers) {
for (Map.Entry<String, String> header : headers.entrySet()) {
Expand Down
42 changes: 24 additions & 18 deletions src/main/java/cl/transbank/util/WebpayApiResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -115,15 +115,18 @@ public static <T> 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;

Expand Down Expand Up @@ -185,15 +188,18 @@ public static <T> List<T> executeToList(
}
final URL url = new URL(String.format("%s/%s", urlBase, endpoint));

final List<T> 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<T> out = requestInstance.requestList(
url,
method,
request,
WebpayApiResource.buildHeaders(options),
clazz
);

if (null == out) return Collections.emptyList();

Expand Down
17 changes: 16 additions & 1 deletion src/main/java/cl/transbank/webpay/common/WebpayOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
* This class represents the options for a Webpay transaction.
*/
@ToString
@AllArgsConstructor
public class WebpayOptions extends Options {

/**
Expand All @@ -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);
}
}
Loading