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.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
14 public class HttpClientFactory {
16 private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientFactory.class);
17 private static final UserTokenHandler userTokenHandler = context -> null;
18 private final HttpConnectionMngFactory connectionMngFactory;
20 HttpClientFactory(HttpConnectionMngFactory connectionMngFactory) {
21 this.connectionMngFactory = connectionMngFactory;
24 HttpClient createClient(String protocol, HttpClientConfigImmutable config) {
25 LOGGER.debug("Create {} client based on {}", protocol, config);
27 ClientCertificate clientCertificate = Constants.HTTPS.equals(protocol) ? config.getClientCertificate() : null;
28 HttpClientConnectionManager connectionManager = connectionMngFactory.getOrCreate(clientCertificate);
29 RequestConfig requestConfig = createClientTimeoutConfiguration(config);
30 CloseableHttpClient client = HttpClients.custom()
31 .setDefaultRequestConfig(requestConfig)
32 .setConnectionManager(connectionManager)
33 .setUserTokenHandler(userTokenHandler)
34 .setRetryHandler(resolveRetryHandler(config))
37 return new HttpClient(client, config);
40 private HttpRequestRetryHandler resolveRetryHandler(HttpClientConfigImmutable config) {
41 return config.getNumOfRetries() > 0 ? config.getRetryHandler() : null;
44 private RequestConfig createClientTimeoutConfiguration(HttpClientConfigImmutable config) {
45 return RequestConfig.custom()
46 .setConnectTimeout(config.getConnectTimeoutMs())
47 .setSocketTimeout(config.getReadTimeoutMs())
48 .setConnectionRequestTimeout(config.getConnectPoolTimeoutMs())