Skip to content

Commit cb1e5ae

Browse files
committed
Added new factory and factory settings
1 parent d5540af commit cb1e5ae

2 files changed

Lines changed: 197 additions & 0 deletions

File tree

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package Invokers;
2+
3+
import com.cybersource.authsdk.core.ConfigException;
4+
import com.cybersource.authsdk.core.MerchantConfig;
5+
import com.cybersource.authsdk.util.GlobalLabelParameters;
6+
import okhttp3.ConnectionPool;
7+
import okhttp3.OkHttpClient;
8+
9+
import java.util.Objects;
10+
import java.util.Properties;
11+
import java.util.concurrent.ConcurrentHashMap;
12+
import java.util.concurrent.TimeUnit;
13+
14+
public class HttpClientFactory {
15+
private static final ConcurrentHashMap<Integer, OkHttpClient> _httpClientInstances = new ConcurrentHashMap<>();
16+
17+
public static OkHttpClient getHttpClient(MerchantConfig merchantConfig, HttpClientFactoryAdditionalSettings additionalSettings) throws ConfigException {
18+
if (merchantConfig == null) {
19+
Properties customProperties = new Properties();
20+
customProperties.setProperty("userDefinedConnectionTimeout", GlobalLabelParameters.DEFAULT_MAX_CONNECT_TIMEOUT_IN_SECONDS);
21+
customProperties.setProperty("userDefinedReadTimeout", GlobalLabelParameters.DEFAULT_MAX_READ_TIMEOUT_IN_SECONDS);
22+
customProperties.setProperty("userDefinedWriteTimeout", GlobalLabelParameters.DEFAULT_MAX_WRITE_TIMEOUT_IN_SECONDS);
23+
customProperties.setProperty("userDefinedKeepAliveDuration", GlobalLabelParameters.DEFAULT_MAX_KEEP_ALIVE_DURATION_IN_SECONDS);
24+
customProperties.setProperty("userDefinedMaxIdleConnections", GlobalLabelParameters.DEFAULT_MAX_IDLE_CONNECTIONS);
25+
26+
merchantConfig = new MerchantConfig(customProperties);
27+
}
28+
29+
int hash = GetHashOfMerchantConfiguration(merchantConfig, additionalSettings);
30+
31+
MerchantConfig finalMerchantConfig = merchantConfig;
32+
33+
return _httpClientInstances.computeIfAbsent(hash, value -> createNewHttpClient(finalMerchantConfig, additionalSettings));
34+
}
35+
36+
private static OkHttpClient createNewHttpClient(MerchantConfig merchantConfig, HttpClientFactoryAdditionalSettings additionalSettings) {
37+
ConnectionPool customConnectionPool = new ConnectionPool(merchantConfig.getUserDefinedMaxIdleConnections(), merchantConfig.getUserDefinedKeepAliveDuration(), TimeUnit.SECONDS);
38+
39+
OkHttpClient.Builder builder = new OkHttpClient.Builder();
40+
41+
builder.connectionPool(customConnectionPool);
42+
builder.connectTimeout(merchantConfig.getUserDefinedConnectionTimeout(), TimeUnit.SECONDS);
43+
builder.readTimeout(merchantConfig.getUserDefinedReadTimeout(), TimeUnit.SECONDS);
44+
builder.writeTimeout(merchantConfig.getUserDefinedWriteTimeout(), TimeUnit.SECONDS);
45+
46+
/* OPTIONAL ADD-ONS */
47+
if (additionalSettings != null) {
48+
if (additionalSettings.getCustomLoggingInterceptor() != null) {
49+
builder.addInterceptor(additionalSettings.getCustomLoggingInterceptor());
50+
}
51+
52+
if (additionalSettings.getCustomRetryInterceptor() != null) {
53+
builder.addInterceptor(additionalSettings.getCustomRetryInterceptor());
54+
}
55+
56+
if (additionalSettings.getCustomSSLSocketFactory() != null && additionalSettings.getCustomX509TrustManager() != null) {
57+
builder.sslSocketFactory(additionalSettings.getCustomSSLSocketFactory(), additionalSettings.getCustomX509TrustManager());
58+
}
59+
60+
if (additionalSettings.getCustomHostnameVerifier() != null) {
61+
builder.hostnameVerifier(additionalSettings.getCustomHostnameVerifier());
62+
}
63+
64+
if (additionalSettings.getCustomRetryOnConnectionFailure() != null) {
65+
builder.retryOnConnectionFailure(additionalSettings.getCustomRetryOnConnectionFailure());
66+
}
67+
68+
if (additionalSettings.getCustomNetworkEventListener() != null) {
69+
builder.eventListener(additionalSettings.getCustomNetworkEventListener());
70+
}
71+
72+
if (additionalSettings.getCustomProxy() != null) {
73+
builder.proxy(additionalSettings.getCustomProxy());
74+
75+
if (additionalSettings.getCustomProxyAuthenticator() != null) {
76+
builder.proxyAuthenticator(additionalSettings.getCustomProxyAuthenticator());
77+
}
78+
}
79+
}
80+
81+
return builder.build();
82+
}
83+
84+
private static int GetHashOfMerchantConfiguration(MerchantConfig merchantConfig, HttpClientFactoryAdditionalSettings additionalSettings) {
85+
return Objects.hash(
86+
merchantConfig.getUserDefinedConnectionTimeout(),
87+
merchantConfig.getUserDefinedReadTimeout(),
88+
merchantConfig.getUserDefinedWriteTimeout(),
89+
merchantConfig.getUserDefinedKeepAliveDuration(),
90+
merchantConfig.getUserDefinedMaxIdleConnections(),
91+
additionalSettings.getCustomLoggingInterceptor(),
92+
additionalSettings.getCustomRetryInterceptor(),
93+
additionalSettings.getCustomSSLSocketFactory(),
94+
additionalSettings.getCustomX509TrustManager(),
95+
additionalSettings.getCustomHostnameVerifier(),
96+
additionalSettings.getCustomRetryOnConnectionFailure(),
97+
additionalSettings.getCustomNetworkEventListener(),
98+
additionalSettings.getCustomProxy(),
99+
additionalSettings.getCustomProxyAuthenticator()
100+
);
101+
}
102+
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package Invokers;
2+
3+
import okhttp3.Authenticator;
4+
import okhttp3.logging.HttpLoggingInterceptor;
5+
import utilities.interceptors.RetryInterceptor;
6+
import utilities.listeners.NetworkEventListener;
7+
8+
import javax.net.ssl.HostnameVerifier;
9+
import javax.net.ssl.SSLSocketFactory;
10+
import javax.net.ssl.X509TrustManager;
11+
import java.net.Proxy;
12+
13+
public class HttpClientFactoryAdditionalSettings {
14+
private HttpLoggingInterceptor customLoggingInterceptor;
15+
private RetryInterceptor customRetryInterceptor;
16+
private SSLSocketFactory customSSLSocketFactory;
17+
private X509TrustManager customX509TrustManager;
18+
private HostnameVerifier customHostnameVerifier;
19+
private Boolean customRetryOnConnectionFailure;
20+
private NetworkEventListener customNetworkEventListener;
21+
private Proxy customProxy;
22+
private Authenticator customProxyAuthenticator;
23+
24+
public HttpLoggingInterceptor getCustomLoggingInterceptor() {
25+
return customLoggingInterceptor;
26+
}
27+
28+
public void setCustomLoggingInterceptor(HttpLoggingInterceptor customLoggingInterceptor) {
29+
this.customLoggingInterceptor = customLoggingInterceptor;
30+
}
31+
32+
public RetryInterceptor getCustomRetryInterceptor() {
33+
return customRetryInterceptor;
34+
}
35+
36+
public void setCustomRetryInterceptor(RetryInterceptor customRetryInterceptor) {
37+
this.customRetryInterceptor = customRetryInterceptor;
38+
}
39+
40+
public SSLSocketFactory getCustomSSLSocketFactory() {
41+
return customSSLSocketFactory;
42+
}
43+
44+
public void setCustomSSLSocketFactory(SSLSocketFactory customSSLSocketFactory) {
45+
this.customSSLSocketFactory = customSSLSocketFactory;
46+
}
47+
48+
public X509TrustManager getCustomX509TrustManager() {
49+
return customX509TrustManager;
50+
}
51+
52+
public void setCustomX509TrustManager(X509TrustManager customX509TrustManager) {
53+
this.customX509TrustManager = customX509TrustManager;
54+
}
55+
56+
public HostnameVerifier getCustomHostnameVerifier() {
57+
return customHostnameVerifier;
58+
}
59+
60+
public void setCustomHostnameVerifier(HostnameVerifier customHostnameVerifier) {
61+
this.customHostnameVerifier = customHostnameVerifier;
62+
}
63+
64+
public Boolean getCustomRetryOnConnectionFailure() {
65+
return customRetryOnConnectionFailure;
66+
}
67+
68+
public void setCustomRetryOnConnectionFailure(Boolean customRetryOnConnectionFailure) {
69+
this.customRetryOnConnectionFailure = customRetryOnConnectionFailure;
70+
}
71+
72+
public NetworkEventListener getCustomNetworkEventListener() {
73+
return customNetworkEventListener;
74+
}
75+
76+
public void setCustomNetworkEventListener(NetworkEventListener customNetworkEventListener) {
77+
this.customNetworkEventListener = customNetworkEventListener;
78+
}
79+
80+
public Proxy getCustomProxy() {
81+
return customProxy;
82+
}
83+
84+
public void setCustomProxy(Proxy customProxy) {
85+
this.customProxy = customProxy;
86+
}
87+
88+
public Authenticator getCustomProxyAuthenticator() {
89+
return customProxyAuthenticator;
90+
}
91+
92+
public void setCustomProxyAuthenticator(Authenticator customProxyAuthenticator) {
93+
this.customProxyAuthenticator = customProxyAuthenticator;
94+
}
95+
}

0 commit comments

Comments
 (0)