From f23a0c589f2519947cdeb286a7817bfa20f0b674 Mon Sep 17 00:00:00 2001 From: wejs Date: Fri, 26 Jan 2018 14:23:41 +0100 Subject: Sonar fixes in RestServiceNode Fixes inlude changes in other files where needed Test coverage provided Change-Id: Id079bb9c5e5596efb11809b3185bdde8edb11fd2 Issue-ID: APPC-525 Signed-off-by: wejs --- .../flow/controller/executorImpl/RestExecutor.java | 185 ++++++++++----------- .../interfaces/FlowExecutorInterface.java | 7 +- .../appc/flow/controller/node/FlowControlNode.java | 13 +- .../appc/flow/controller/node/RestServiceNode.java | 24 ++- 4 files changed, 100 insertions(+), 129 deletions(-) (limited to 'appc-config/appc-flow-controller/provider/src/main') diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/executorImpl/RestExecutor.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/executorImpl/RestExecutor.java index 4770aba28..011ac973a 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/executorImpl/RestExecutor.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/executorImpl/RestExecutor.java @@ -21,142 +21,125 @@ */ package org.onap.appc.flow.controller.executorImpl; -import java.io.FileInputStream; -import java.io.InputStream; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.sun.jersey.api.client.Client; +import com.sun.jersey.api.client.ClientResponse; +import com.sun.jersey.api.client.ClientResponse.Status; +import com.sun.jersey.api.client.WebResource; +import com.sun.jersey.api.client.config.DefaultClientConfig; +import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; +import com.sun.jersey.client.urlconnection.HTTPSProperties; import java.net.URI; -import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; -import java.util.Properties; - +import java.util.Map; +import java.util.Optional; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import javax.ws.rs.HttpMethod; import javax.ws.rs.core.MediaType; - import org.apache.commons.lang3.StringUtils; import org.onap.appc.flow.controller.data.Response; import org.onap.appc.flow.controller.data.Transaction; import org.onap.appc.flow.controller.interfaces.FlowExecutorInterface; -import org.onap.appc.flow.controller.utils.FlowControllerConstants; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.api.client.config.DefaultClientConfig; -import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; public class RestExecutor implements FlowExecutorInterface { private static final EELFLogger log = EELFManager.getInstance().getLogger(RestExecutor.class); - private static final String SDNC_CONFIG_DIR_VAR = "SDNC_CONFIG_DIR"; - Properties props = new Properties(); - public RestExecutor() throws Exception { - String propDir = System.getenv(SDNC_CONFIG_DIR_VAR); - if (propDir == null) - throw new Exception(" Cannot find Property file -" + SDNC_CONFIG_DIR_VAR); - String propFile = propDir + FlowControllerConstants.APPC_FLOW_CONTROLLER; - InputStream propStream = new FileInputStream(propFile); - try{ - props.load(propStream); - } - catch (Exception e){ - throw new Exception("Could not load properties file " + propFile, e); - } - finally{ - try{ - propStream.close(); - } - catch (Exception e){ - log.warn("Could not close FileInputStream", e); - } - } - } + @Override - public HashMap execute(Transaction transaction, SvcLogicContext ctx) throws Exception{ + public Map execute(Transaction transaction, SvcLogicContext ctx) throws Exception{ log.info("Configuring Rest Operation....." + transaction.toString()); - Response response = new Response(); - HashMap outputMessage = new HashMap(); + Map outputMessage = new HashMap<>(); Client client = null; - WebResource webResource = null; - ClientResponse clientResponse = null; - String responseDataType=MediaType.APPLICATION_JSON; - String requestDataType=MediaType.APPLICATION_JSON; - - try{ - DefaultClientConfig defaultClientConfig = new DefaultClientConfig(); + try { System.setProperty("jsse.enableSNIExtension", "false"); - SSLContext sslContext = null; - SecureRestClientTrustManager secureRestClientTrustManager = new SecureRestClientTrustManager(); - sslContext = SSLContext.getInstance("SSL"); - sslContext.init(null, new javax.net.ssl.TrustManager[] { secureRestClientTrustManager }, null); + SSLContext sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, new javax.net.ssl.TrustManager[] {new SecureRestClientTrustManager()}, null); + DefaultClientConfig defaultClientConfig = new DefaultClientConfig(); defaultClientConfig.getProperties().put( - com.sun.jersey.client.urlconnection.HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, - new com.sun.jersey.client.urlconnection.HTTPSProperties(getHostnameVerifier(), sslContext)); - client = Client.create(defaultClientConfig); + HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, + new HTTPSProperties(getHostnameVerifier(), sslContext)); + client = createClient(defaultClientConfig); client.addFilter(new HTTPBasicAuthFilter(transaction.getuId(), transaction.getPswd())); - webResource = client.resource(new URI(transaction.getExecutionEndPoint())); + WebResource webResource = client.resource(new URI(transaction.getExecutionEndPoint())); webResource.setProperty("Content-Type", "application/json;charset=UTF-8"); - log.info("Starting Rest Operation....."); - if(HttpMethod.GET.equalsIgnoreCase(transaction.getExecutionRPC())){ - clientResponse = webResource.accept(responseDataType).get(ClientResponse.class); - }else if(HttpMethod.POST.equalsIgnoreCase(transaction.getExecutionRPC())){ - clientResponse = webResource.type(requestDataType).post(ClientResponse.class, transaction.getPayload()); - }else if(HttpMethod.PUT.equalsIgnoreCase(transaction.getExecutionRPC())){ - clientResponse = webResource.type(requestDataType).put(ClientResponse.class,transaction.getPayload()); - }else if(HttpMethod.DELETE.equalsIgnoreCase(transaction.getExecutionRPC())){ - clientResponse = webResource.delete(ClientResponse.class); - } - - if(clientResponse.getStatus() == 200){ - response.setResponseCode(String.valueOf(clientResponse.getStatus())); - ArrayList responses = new ArrayList(); - responses.add(response); - transaction.setResponses(responses); - outputMessage.put("restResponse", clientResponse.getEntity(String.class)); - } - else{ + ClientResponse clientResponse = getClientResponse(transaction, webResource) + .orElseThrow(() -> new Exception( + "Cannot determine the state of : " + + transaction.getActionLevel() + + " HTTP response is null")); - String errorMsg = clientResponse.getEntity(String.class); - if (StringUtils.isNotBlank(errorMsg)) { - log.debug("Error Message from Client Response" + errorMsg); - } - - throw new Exception("Can not determine the state of : " + transaction.getActionLevel() + " HTTP error code : " - + clientResponse.getStatus()); - - } + processClientResponse(clientResponse, transaction, outputMessage); log.info("Completed Rest Operation....."); - }catch (Exception e) { - e.printStackTrace(); - log.debug("failed in RESTCONT Action ("+transaction.getExecutionRPC()+") for the resource " + transaction.getExecutionEndPoint() + ", falut message :"+e.getMessage()); - throw new Exception("Error While Sending Rest Request" + e.getMessage()); - } - finally { - // clean up. - webResource = null; - if(client != null){ + } catch (Exception e) { + log.debug("failed in RESTCONT Action (" + + transaction.getExecutionRPC() + + ") for the resource " + + transaction.getExecutionEndPoint() + + ", fault message :" + + e.getMessage()); + throw new Exception("Error While Sending Rest Request", e); + + } finally { + if(client != null) { client.destroy(); - client = null; } } - return outputMessage; } -private HostnameVerifier getHostnameVerifier() { - return new HostnameVerifier() { - @Override - public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) { - return true; + private HostnameVerifier getHostnameVerifier() { + return (hostname, sslSession) -> true; + } + + Client createClient(DefaultClientConfig defaultClientConfig) { + return Client.create(defaultClientConfig); + } + + private Optional getClientResponse(Transaction transaction, WebResource webResource) { + String responseDataType=MediaType.APPLICATION_JSON; + String requestDataType=MediaType.APPLICATION_JSON; + ClientResponse clientResponse = null; + + log.info("Starting Rest Operation....."); + if(HttpMethod.GET.equalsIgnoreCase(transaction.getExecutionRPC())) { + clientResponse = webResource.accept(responseDataType).get(ClientResponse.class); + }else if(HttpMethod.POST.equalsIgnoreCase(transaction.getExecutionRPC())) { + clientResponse = webResource.type(requestDataType).post(ClientResponse.class, transaction.getPayload()); + }else if(HttpMethod.PUT.equalsIgnoreCase(transaction.getExecutionRPC())) { + clientResponse = webResource.type(requestDataType).put(ClientResponse.class, transaction.getPayload()); + }else if(HttpMethod.DELETE.equalsIgnoreCase(transaction.getExecutionRPC())) { + clientResponse = webResource.delete(ClientResponse.class); } - }; -} + return Optional.ofNullable(clientResponse); + } + private void processClientResponse (ClientResponse clientResponse, + Transaction transaction, + Map outputMessage ) throws Exception { + + if(clientResponse.getStatus() == Status.OK.getStatusCode()) { + Response response = new Response(); + response.setResponseCode(String.valueOf(Status.OK.getStatusCode())); + transaction.setResponses(Collections.singletonList(response)); + outputMessage.put("restResponse", clientResponse.getEntity(String.class)); + } else { + String errorMsg = clientResponse.getEntity(String.class); + if (StringUtils.isNotBlank(errorMsg)) { + log.debug("Error Message from Client Response" + errorMsg); + } + throw new Exception("Cannot determine the state of : " + + transaction.getActionLevel() + + " HTTP error code : " + + clientResponse.getStatus()); + } + } } diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/interfaces/FlowExecutorInterface.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/interfaces/FlowExecutorInterface.java index dccd78222..2949f8d18 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/interfaces/FlowExecutorInterface.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/interfaces/FlowExecutorInterface.java @@ -22,15 +22,14 @@ package org.onap.appc.flow.controller.interfaces; -import java.util.HashMap; - import org.onap.appc.flow.controller.data.Transaction; -import org.onap.appc.flow.controller.utils.FlowControllerConstants; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; +import java.util.Map; +@FunctionalInterface public interface FlowExecutorInterface { - public HashMap execute(Transaction transaction, SvcLogicContext ctx) throws Exception; + Map execute(Transaction transaction, SvcLogicContext ctx) throws Exception; } diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java index 34cdf87ec..8b088e118 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/FlowControlNode.java @@ -48,16 +48,7 @@ import org.onap.appc.flow.controller.dbervices.FlowControlDBService; import org.onap.appc.flow.controller.executorImpl.GraphExecutor; import org.onap.appc.flow.controller.executorImpl.NodeExecutor; import org.onap.appc.flow.controller.executorImpl.RestExecutor; -import org.onap.appc.flow.controller.interfaceData.ActionIdentifier; -import org.onap.appc.flow.controller.interfaceData.Capabilities; -import org.onap.appc.flow.controller.interfaceData.DependencyInfo; -import org.onap.appc.flow.controller.interfaceData.Input; -import org.onap.appc.flow.controller.interfaceData.InventoryInfo; -import org.onap.appc.flow.controller.interfaceData.RequestInfo; -import org.onap.appc.flow.controller.interfaceData.Vm; -import org.onap.appc.flow.controller.interfaceData.VnfInfo; -import org.onap.appc.flow.controller.interfaceData.Vnfcs; -import org.onap.appc.flow.controller.interfaceData.Vnfcslist; +import org.onap.appc.flow.controller.interfaceData.*; import org.onap.appc.flow.controller.interfaces.FlowExecutorInterface; import org.onap.appc.flow.controller.utils.EncryptionTool; import org.onap.appc.flow.controller.utils.FlowControllerConstants; @@ -140,7 +131,7 @@ public class FlowControlNode implements SvcLogicJavaPlugin{ log.info("CollectInputParamsData-Input: " + input ); RestExecutor restExe = new RestExecutor(); - HashMapflowSeq= restExe.execute(transaction, localContext); + MapflowSeq= restExe.execute(transaction, localContext); JSONObject sequence = new JSONObject(flowSeq.get("restResponse")); if(sequence.has("output")) diff --git a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/RestServiceNode.java b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/RestServiceNode.java index 23d332ba0..b3c2fe23e 100644 --- a/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/RestServiceNode.java +++ b/appc-config/appc-flow-controller/provider/src/main/java/org/onap/appc/flow/controller/node/RestServiceNode.java @@ -22,13 +22,11 @@ package org.onap.appc.flow.controller.node; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.StringUtils; import org.onap.appc.flow.controller.data.Transaction; import org.onap.appc.flow.controller.executorImpl.RestExecutor; @@ -37,11 +35,11 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import org.onap.ccsdk.sli.core.sli.SvcLogicException; import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; +import java.util.Properties; public class RestServiceNode implements SvcLogicJavaPlugin{ @@ -126,7 +124,7 @@ public class RestServiceNode implements SvcLogicJavaPlugin{ if(transaction.getPswd() == null) transaction.setPswd(prop.getProperty(ctx.getAttribute(FlowControllerConstants.INPUT_REQUEST_ACTION).concat(".default-rest-pass"))); - HashMap output = restRequestExecutor.execute(transaction, ctx); + Map output = restRequestExecutor.execute(transaction, ctx); if(isValidJSON(output.get("restResponse")) != null) { ctx.setAttribute(responsePrefix + "." + FlowControllerConstants.OUTPUT_STATUS_MESSAGE , output.get("restResponse")); -- cgit 1.2.3-korg