1 package org.openecomp.sdc.common.http.client.api;
3 import org.apache.http.client.HttpRequestRetryHandler;
4 import org.apache.http.client.UserTokenHandler;
5 import org.apache.http.client.config.RequestConfig;
6 import org.apache.http.conn.HttpClientConnectionManager;
7 import org.apache.http.impl.client.CloseableHttpClient;
8 import org.apache.http.impl.client.HttpClients;
9 import org.openecomp.sdc.common.api.Constants;
10 import org.openecomp.sdc.common.http.config.ClientCertificate;
11 import org.openecomp.sdc.common.log.wrappers.Logger;
13 public class HttpClientFactory {
15 private static final Logger logger = Logger.getLogger(HttpClientFactory.class.getName());
16 private static final UserTokenHandler userTokenHandler = context -> null;
17 private final HttpConnectionMngFactory connectionMngFactory;
19 HttpClientFactory(HttpConnectionMngFactory connectionMngFactory) {
20 this.connectionMngFactory = connectionMngFactory;
23 HttpClient createClient(String protocol, HttpClientConfigImmutable config) {
24 logger.debug("Create {} client based on {}", protocol, config);
26 ClientCertificate clientCertificate = Constants.HTTPS.equals(protocol) ? config.getClientCertificate() : null;
27 HttpClientConnectionManager connectionManager = connectionMngFactory.getOrCreate(clientCertificate);
28 RequestConfig requestConfig = createClientTimeoutConfiguration(config);
29 CloseableHttpClient client = HttpClients.custom()
30 .setDefaultRequestConfig(requestConfig)
31 .setConnectionManager(connectionManager)
32 .setUserTokenHandler(userTokenHandler)
33 .setRetryHandler(resolveRetryHandler(config))
36 return new HttpClient(client, config);
39 private HttpRequestRetryHandler resolveRetryHandler(HttpClientConfigImmutable config) {
40 return config.getNumOfRetries() > 0 ? config.getRetryHandler() : null;
43 private RequestConfig createClientTimeoutConfiguration(HttpClientConfigImmutable config) {
44 return RequestConfig.custom()
45 .setConnectTimeout(config.getConnectTimeoutMs())
46 .setSocketTimeout(config.getReadTimeoutMs())
47 .setConnectionRequestTimeout(config.getConnectPoolTimeoutMs())