X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=holmes-actions%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fholmes%2Fcommon%2Futils%2FHttpsUtils.java;h=2df4d5518e79a8c81af59577d73720fcaa92336c;hb=3356fb82b20ebe7209522e4e009dd6aea5ed1802;hp=3ef1201a7cf425586ec4dfdf5581f468e42d7f7f;hpb=4eaf0290dd2572f40526da9cfd09a1ccee4da76d;p=holmes%2Fcommon.git diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java b/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java index 3ef1201..2df4d55 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java @@ -23,15 +23,18 @@ import java.util.List; import java.util.Map; import lombok.extern.slf4j.Slf4j; import org.apache.http.Consts; -import org.apache.http.HeaderIterator; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; -import org.apache.http.ParseException; +import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; @@ -45,16 +48,20 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.util.EntityUtils; +import org.jvnet.hk2.annotations.Service; import org.onap.holmes.common.exception.CorrelationException; @Slf4j +@Service public class HttpsUtils { private static final String HTTP = "http"; private static final String HTTPS = "https"; private static SSLConnectionSocketFactory sslConnectionSocketFactory = null; private static PoolingHttpClientConnectionManager connectionManager = null; private static SSLContextBuilder sslContextBuilder = null; - static { + public static final int DEFUALT_TIMEOUT = 30000; + + static{ try { sslContextBuilder = new SSLContextBuilder(); sslContextBuilder.loadTrustMaterial(null, new TrustStrategy() { @@ -64,7 +71,7 @@ public class HttpsUtils { } }); sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build(), - new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"}, null, + new String[]{"SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE); Registry registry = RegistryBuilder.create() .register(HTTP, new PlainConnectionSocketFactory()) @@ -73,105 +80,112 @@ public class HttpsUtils { connectionManager = new PoolingHttpClientConnectionManager(registry); connectionManager.setMaxTotal(200); } catch (Exception e) { - log.error("Failed to init ssl builder" + e.getMessage()); + log.error("Failed to initialize the ssl builder: " + e.getMessage(), e); } } - public static String post(String url, Map header, Map param, - HttpEntity entity) throws Exception { - String result = ""; - CloseableHttpClient httpClient = null; - try { - httpClient = getHttpClient(); - HttpPost httpPost = new HttpPost(url); - if (!header.isEmpty()) { - for (Map.Entry entry : header.entrySet()) { - httpPost.addHeader(entry.getKey(), entry.getValue()); - } + public static HttpResponse get(HttpGet httpGet, Map header, CloseableHttpClient httpClient) throws CorrelationException { + return getGetAndDeleteResponse(httpGet, header, httpClient); + } + + public static HttpResponse post(HttpPost httpPost, Map header, Map param, + HttpEntity entity, CloseableHttpClient httpClient) throws CorrelationException { + return getPostAndPutResponse(httpPost, header, param, entity, httpClient); + } + + public static HttpResponse put(HttpPut httpPut, Map header, Map param, + HttpEntity entity, CloseableHttpClient httpClient) throws CorrelationException { + return getPostAndPutResponse(httpPut, header, param, entity, httpClient); + } + + public static HttpResponse delete(HttpDelete httpDelete, Map header, CloseableHttpClient httpClient) throws CorrelationException { + return getGetAndDeleteResponse(httpDelete, header, httpClient); + } + + private static void addParams(Map param, HttpEntityEnclosingRequestBase requestBase) { + if (!param.isEmpty()) { + List formparams = new ArrayList<>(); + for (Map.Entry entry : param.entrySet()) { + formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } - if (!param.isEmpty()) { - List formparams = new ArrayList<>(); - for (Map.Entry entry : param.entrySet()) { - formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); - } - UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(formparams, - Consts.UTF_8); - httpPost.setEntity(urlEncodedFormEntity); + UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(formparams, + Consts.UTF_8); + requestBase.setEntity(urlEncodedFormEntity); + } + } + + private static HttpRequestBase addHeaders(Map header, HttpRequestBase httpRequestBase) { + if (!header.isEmpty()) { + for (Map.Entry entry : header.entrySet()) { + httpRequestBase.addHeader(entry.getKey(), entry.getValue()); } + } + return httpRequestBase; + } + + private static HttpResponse getPostAndPutResponse(HttpEntityEnclosingRequestBase requestBase, + Map header, Map param, HttpEntity entity, + CloseableHttpClient httpClient) throws CorrelationException { + try { + addHeaders(header, requestBase); + addParams(param, requestBase); if (entity != null) { - httpPost.setEntity(entity); - } - HttpResponse httpResponse = httpClient.execute(httpPost); - int statusCode = httpResponse.getStatusLine().getStatusCode(); - if (statusCode == HttpStatus.SC_OK) { - HttpEntity resEntity = httpResponse.getEntity(); - result = EntityUtils.toString(resEntity); - } else { - readHttpResponse(httpResponse); + requestBase.setEntity(entity); } + return executeRequest(httpClient, requestBase); } catch (Exception e) { - throw new CorrelationException("Failed to use post method to get data from server"); - } finally { - if (httpClient != null) { - httpClient.close(); - } + throw new CorrelationException("Failed to connect to server", e); } - return result; } - public static String get(String url, Map header) throws Exception { - String result = ""; - CloseableHttpClient httpClient = null; + private static HttpResponse getGetAndDeleteResponse(HttpRequestBase requestBase, + Map header, CloseableHttpClient httpClient) throws CorrelationException { try { - httpClient = getHttpClient(); - HttpGet httpGet = new HttpGet(url); - if (!header.isEmpty()) { - for (Map.Entry entry : header.entrySet()) { - httpGet.addHeader(entry.getKey(), entry.getValue()); - } - } - HttpResponse httpResponse = httpClient.execute(httpGet); + addHeaders(header, requestBase); + return executeRequest(httpClient, requestBase); + } catch (Exception e) { + throw new CorrelationException("Failed to connect to server", e); + } + } + + public static String extractResponseEntity(HttpResponse httpResponse) + throws CorrelationException, IOException { + String result = ""; + if (httpResponse != null) { int statusCode = httpResponse.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { HttpEntity resEntity = httpResponse.getEntity(); result = EntityUtils.toString(resEntity); } else { - readHttpResponse(httpResponse); - } - } catch (Exception e) { - throw new CorrelationException("Failed to use get method get data from server"); - } finally { - if (httpClient != null) { - httpClient.close(); + throw new CorrelationException("Get an error status from server : " + statusCode); } } return result; } - private static CloseableHttpClient getHttpClient() throws Exception { + private static HttpResponse executeRequest(CloseableHttpClient httpClient, HttpRequestBase httpRequest) + throws CorrelationException, IOException { + HttpResponse httpResponse; + try { + httpResponse = httpClient.execute(httpRequest); + } catch (Exception e) { + throw new CorrelationException("Failed to get data from server" ,e); + } + return httpResponse; + } + + public static CloseableHttpClient getHttpClient(int timeout) { + RequestConfig defaultRequestConfig = RequestConfig.custom() + .setSocketTimeout(timeout) + .setConnectTimeout(timeout) + .setConnectionRequestTimeout(timeout) + .build(); CloseableHttpClient httpClient = HttpClients.custom() + .setDefaultRequestConfig(defaultRequestConfig) .setSSLSocketFactory(sslConnectionSocketFactory) .setConnectionManager(connectionManager) .setConnectionManagerShared(true) .build(); return httpClient; } - - private static String readHttpResponse(HttpResponse httpResponse) - throws ParseException, IOException { - StringBuilder builder = new StringBuilder(); - HttpEntity entity = httpResponse.getEntity(); - builder.append("status:" + httpResponse.getStatusLine()); - builder.append("headers:"); - HeaderIterator iterator = httpResponse.headerIterator(); - while (iterator.hasNext()) { - builder.append("\t" + iterator.next()); - } - if (entity != null) { - String responseString = EntityUtils.toString(entity); - builder.append("response length:" + responseString.length()); - builder.append("response content:" + responseString.replace("\r\n", "")); - } - return builder.toString(); - } }