From 296599aa5977fb047d9d0619ec3e463c031b0b49 Mon Sep 17 00:00:00 2001 From: koblosz Date: Thu, 23 Aug 2018 15:39:19 +0200 Subject: Using Generic client in SchedulerRestInterface Change-Id: I69603792016a091037d8767bec0f3d25641af86e Issue-ID: VID-270 Signed-off-by: koblosz --- .../onap/vid/scheduler/SchedulerRestInterface.java | 151 ++++++++------------- .../src/main/java/org/onap/vid/utils/Logging.java | 10 ++ 2 files changed, 66 insertions(+), 95 deletions(-) (limited to 'vid-app-common/src/main/java') diff --git a/vid-app-common/src/main/java/org/onap/vid/scheduler/SchedulerRestInterface.java b/vid-app-common/src/main/java/org/onap/vid/scheduler/SchedulerRestInterface.java index d66ed4947..a4c5b00a8 100644 --- a/vid-app-common/src/main/java/org/onap/vid/scheduler/SchedulerRestInterface.java +++ b/vid-app-common/src/main/java/org/onap/vid/scheduler/SchedulerRestInterface.java @@ -1,23 +1,22 @@ package org.onap.vid.scheduler; import com.att.eelf.configuration.EELFLogger; -import org.apache.commons.codec.binary.Base64; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import io.joshworks.restclient.http.HttpResponse; import org.eclipse.jetty.util.security.Password; -import org.onap.vid.aai.util.HttpClientMode; -import org.onap.vid.aai.util.HttpsAuthClient; -import org.onap.vid.client.HttpBasicClient; -import org.onap.vid.exceptions.GenericUncheckedException; -import org.onap.vid.utils.Logging; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.util.SystemProperties; -import org.springframework.beans.factory.annotation.Autowired; +import org.onap.vid.client.SyncRestClient; +import org.onap.vid.client.SyncRestClientInterface; +import org.onap.vid.exceptions.GenericUncheckedException; +import org.onap.vid.utils.Logging; import org.springframework.http.HttpMethod; import org.springframework.stereotype.Service; -import javax.ws.rs.client.Client; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.Response; +import java.util.Base64; import java.util.Collections; +import java.util.Map; import java.util.function.Function; import static org.onap.vid.utils.Logging.REQUEST_ID_HEADER_KEY; @@ -25,126 +24,88 @@ import static org.onap.vid.utils.Logging.REQUEST_ID_HEADER_KEY; @Service public class SchedulerRestInterface implements SchedulerRestInterfaceIfc { - private Client client = null; - private Function propertyGetter; - - @Autowired - HttpsAuthClient httpsAuthClient; - - private MultivaluedHashMap commonHeaders; - - /** The logger. */ - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerRestInterface.class); final private static EELFLogger outgoingRequestsLogger = Logging.getRequestsLogger("scheduler"); + private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SchedulerRestInterface.class); + private SyncRestClientInterface syncRestClient; + private Function propertyGetter; + private Map commonHeaders; - public SchedulerRestInterface(){ + public SchedulerRestInterface() { this.propertyGetter = SystemProperties::getProperty; } - public SchedulerRestInterface(Function propertyGetter){ + public SchedulerRestInterface(Function propertyGetter) { this.propertyGetter = propertyGetter; } public void initRestClient() { logger.info("Starting to initialize rest client "); + String authStringEnc = calcEncodedAuthString(); - final String username; - final String password; - - /*Setting user name based on properties*/ - String retrievedUsername = propertyGetter.apply(SchedulerProperties.SCHEDULER_USER_NAME_VAL); - if(retrievedUsername.isEmpty()) { - username = ""; - } else { - username = retrievedUsername; - } - - /*Setting password based on properties*/ - String retrievedPassword = propertyGetter.apply(SchedulerProperties.SCHEDULER_PASSWORD_VAL); - if(retrievedPassword.isEmpty()) { - password = ""; - } else { - if (retrievedPassword.contains("OBF:")) { - password = Password.deobfuscate(retrievedPassword); - } else { - password = retrievedPassword; - } - } - - String authString = username + ":" + password; - - byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); - String authStringEnc = new String(authEncBytes); + commonHeaders = Maps.newHashMap(); + commonHeaders.put("Authorization", "Basic " + authStringEnc); - commonHeaders = new MultivaluedHashMap<> (); - commonHeaders.put("Authorization", Collections.singletonList("Basic " + authStringEnc)); - - try { - if ( !username.isEmpty() ) { - client = httpsAuthClient.getClient(HttpClientMode.WITHOUT_KEYSTORE); - } - else { - - client = HttpBasicClient.getClient(); - } - } catch (Exception e) { - logger.error(" <== Unable to initialize rest client ", e); - } + syncRestClient = new SyncRestClient(); logger.info("\t<== Client Initialized \n"); } - public void Get (T t, String sourceId, String path, org.onap.vid.scheduler.RestObject restObject ) { - - String methodName = "Get"; - String url = String.format("%s%s",propertyGetter.apply(SchedulerProperties.SCHEDULER_SERVER_URL_VAL), path); + public void Get(T t, String sourceId, String path, org.onap.vid.scheduler.RestObject restObject) { initRestClient(); + String methodName = "Get"; + String url = String.format("%s%s", propertyGetter.apply(SchedulerProperties.SCHEDULER_SERVER_URL_VAL), path); Logging.logRequest(outgoingRequestsLogger, HttpMethod.GET, url); - final Response cres = client.target(url) - .request() - .accept("application/json") - .headers(commonHeaders) - .header(REQUEST_ID_HEADER_KEY, Logging.extractOrGenerateRequestId()) - .get(); - Logging.logResponse(outgoingRequestsLogger, HttpMethod.GET, url, cres); - int status = cres.getStatus(); - restObject.setStatusCode (status); + Map requestHeaders = ImmutableMap.builder() + .putAll(commonHeaders) + .put(REQUEST_ID_HEADER_KEY, Logging.extractOrGenerateRequestId()).build(); + final HttpResponse response = ((HttpResponse) syncRestClient.get(url, requestHeaders, + Collections.emptyMap(), t.getClass())); + Logging.logResponse(outgoingRequestsLogger, HttpMethod.GET, url, response); + int status = response.getStatus(); + restObject.setStatusCode(status); if (status == 200) { - t = (T) cres.readEntity(t.getClass()); + t = response.getBody(); restObject.set(t); } else { - throw new GenericUncheckedException(String.format("%s with status=%d, url=%s", methodName, status,url)); + throw new GenericUncheckedException(String.format("%s with status=%d, url=%s", methodName, status, url)); } - } public void Delete(T t, String sourceID, String path, org.onap.vid.scheduler.RestObject restObject) { - initRestClient(); - - String url = String.format( "%s%s",propertyGetter.apply(SchedulerProperties.SCHEDULER_SERVER_URL_VAL), path); + String url = String.format("%s%s", propertyGetter.apply(SchedulerProperties.SCHEDULER_SERVER_URL_VAL), path); Logging.logRequest(outgoingRequestsLogger, HttpMethod.DELETE, url); - Response cres = client.target(url) - .request() - .accept("application/json") - .headers(commonHeaders) - .header(REQUEST_ID_HEADER_KEY, Logging.extractOrGenerateRequestId()) - .delete(); - Logging.logResponse(outgoingRequestsLogger, HttpMethod.DELETE, url, cres); - - int status = cres.getStatus(); + Map requestHeaders = ImmutableMap.builder() + .putAll(commonHeaders) + .put(REQUEST_ID_HEADER_KEY, Logging.extractOrGenerateRequestId()).build(); + final HttpResponse response = (HttpResponse) syncRestClient.delete(url, requestHeaders, t.getClass()); + + Logging.logResponse(outgoingRequestsLogger, HttpMethod.DELETE, url, response); + + int status = response.getStatus(); restObject.setStatusCode(status); - t = (T) cres.readEntity(t.getClass()); + t = response.getBody(); restObject.set(t); - } - public T getInstance(Class clazz) throws IllegalAccessException, InstantiationException - { + public T getInstance(Class clazz) throws IllegalAccessException, InstantiationException { return clazz.newInstance(); } + private String calcEncodedAuthString() { + String retrievedUsername = propertyGetter.apply(SchedulerProperties.SCHEDULER_USER_NAME_VAL); + final String username = retrievedUsername.isEmpty() ? "" : retrievedUsername; + + String retrievedPassword = propertyGetter.apply(SchedulerProperties.SCHEDULER_PASSWORD_VAL); + final String password = retrievedPassword.isEmpty() ? "" : getDeobfuscatedPassword(retrievedPassword); + + return Base64.getEncoder().encodeToString((username + ":" + password).getBytes()); + } + + private static String getDeobfuscatedPassword(String password) { + return password.contains("OBF:") ? Password.deobfuscate(password) : password; + } } diff --git a/vid-app-common/src/main/java/org/onap/vid/utils/Logging.java b/vid-app-common/src/main/java/org/onap/vid/utils/Logging.java index e0ee6fbf0..3ac905884 100644 --- a/vid-app-common/src/main/java/org/onap/vid/utils/Logging.java +++ b/vid-app-common/src/main/java/org/onap/vid/utils/Logging.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.google.common.collect.ImmutableList; +import io.joshworks.restclient.http.HttpResponse; import org.apache.commons.lang3.StringUtils; import org.onap.vid.exceptions.GenericUncheckedException; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; @@ -101,6 +102,15 @@ public class Logging { } } + public static void logResponse(final EELFLogger logger, final HttpMethod method, final String url, final HttpResponse response) { + try { + logger.debug("Received {} {} Status: {} . Body: {}", method.name(), url, response.getStatus(), response.getBody()); + } + catch (ProcessingException | IllegalStateException e) { + logger.debug("Received {} {} Status: {} . Failed to read response", method.name(), url, response.getStatus()); + } + } + public static void logResponse(final EELFLogger logger, final HttpMethod method, final String url, final Response response) { logResponse(logger, method, url, response, String.class); } -- cgit 1.2.3-korg