refactor camunda client in apih 99/106699/2
authorPlummer, Brittany <brittany.plummer@att.com>
Mon, 27 Apr 2020 18:40:36 +0000 (14:40 -0400)
committerBenjamin, Max (mb388a) <mb388a@att.com>
Tue, 28 Apr 2020 01:53:38 +0000 (21:53 -0400)
Switched CamundaClient to use restTemplate
Combined clients into one CamundaClient
Initial setup of exception handling in camundaclient
Initial fix of compilation issues
Switched CamundaClient constructor
Updated how url is set in CamundaClient
Updated auth to fix tag mismatch warning
Added throwing ClientConnectionException to client
Updated ServiceInstancesTest cases
Updated error handling for CamundaClient
Updated how response is returned
Fixed failing unit tests in apih infra
Refactored response handler for responseentity
Fixed failing unit tests in apih
Removed old unit tests for client
Import cleanup for unneeded changes
Updated to use new CamundaClient
Updated CamundaClient and ResponseHandler tests
Removed unused RequestHandler

Issue-ID: SO-2834
Signed-off-by: Benjamin, Max (mb388a) <mb388a@att.com>
Change-Id: I82ff489c9c939a7e8ec0e48476daf7e45baa5f20

22 files changed:
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaClient.java
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaTaskClient.java [deleted file]
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/RequestClient.java [deleted file]
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/RequestClientFactory.java [deleted file]
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/ResponseHandler.java
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ApiException.java
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/BPMNFailureException.java
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ClientConnectionException.java
mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaClientTest.java
mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java [deleted file]
mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/RequestClientTest.java [deleted file]
mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/ResponseHandlerTest.java
mso-api-handlers/mso-api-handler-common/src/test/resources/CamundaClientTest/CamundaFailure.json [new file with mode: 0644]
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/E2EServiceInstances.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ManualTasks.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/TasksHandler.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/AbstractRestHandler.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/E2EServiceInstancesTest.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ManualTasksTest.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java
mso-api-handlers/mso-api-handler-infra/src/test/resources/application-test.yaml

index bc8af6e..33e4740 100644 (file)
@@ -25,84 +25,63 @@ package org.onap.so.apihandler.common;
 
 
 import java.io.IOException;
-import java.util.UUID;
+import java.security.GeneralSecurityException;
+import java.util.ArrayList;
+import java.util.List;
 import javax.xml.bind.DatatypeConverter;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.apache.http.HttpStatus;
 import org.onap.so.apihandler.camundabeans.CamundaBooleanInput;
 import org.onap.so.apihandler.camundabeans.CamundaInput;
 import org.onap.so.apihandler.camundabeans.CamundaIntegerInput;
 import org.onap.so.apihandler.camundabeans.CamundaRequest;
+import org.onap.so.apihandler.camundabeans.CamundaResponse;
 import org.onap.so.apihandler.camundabeans.CamundaVIDRequest;
+import org.onap.so.apihandlerinfra.exceptions.ApiException;
+import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException;
+import org.onap.so.apihandlerinfra.exceptions.ClientConnectionException;
+import org.onap.so.utils.CryptoUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.HttpStatusCodeException;
+import org.springframework.web.client.ResourceAccessException;
+import org.springframework.web.client.RestTemplate;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 
-public class CamundaClient extends RequestClient {
+@Component
+public class CamundaClient {
     private static Logger logger = LoggerFactory.getLogger(CamundaClient.class);
-    private static final String CAMUNDA_URL_MESAGE = "Camunda url is: ";
-    private static final String CAMUNDA_RESPONSE = "Response is: {}";
-    private static final String AUTHORIZATION = "Authorization";
     private static final String BASIC = "Basic ";
 
-    public CamundaClient() {
-        super(CommonConstants.CAMUNDA);
-    }
+    @Autowired
+    private RestTemplate restTemplate;
 
+    @Autowired
+    private Environment env;
 
-    @Override
-    public HttpResponse post(String camundaReqXML, String requestId, String requestTimeout, String schemaVersion,
-            String serviceInstanceId, String action) throws IOException {
-        HttpPost post = new HttpPost(url);
-        logger.debug(CAMUNDA_URL_MESAGE + url);
-        String jsonReq = wrapRequest(camundaReqXML, requestId, serviceInstanceId, requestTimeout, schemaVersion);
+    @Autowired
+    private ResponseHandler responseHandler;
 
-        StringEntity input = new StringEntity(jsonReq);
-        input.setContentType(CommonConstants.CONTENT_TYPE_JSON);
+    public ResponseEntity<String> post(String camundaReqXML, String requestId, String requestTimeout,
+            String schemaVersion, String serviceInstanceId, String action, String orchestrationURI)
+            throws ApiException {
+        String jsonReq = wrapRequest(camundaReqXML, requestId, serviceInstanceId, requestTimeout, schemaVersion,
+                orchestrationURI);
         logger.info("Camunda Request Content: {}", jsonReq);
 
-
-        post.setEntity(input);
-        setupHeaders(post);
-
-        HttpResponse response = client.execute(post);
-        logger.debug(CAMUNDA_RESPONSE, response);
-
-        return response;
-    }
-
-
-    private void setupHeaders(HttpPost post) {
-        post.addHeader(ONAPLogConstants.Headers.REQUEST_ID, MDC.get(ONAPLogConstants.MDCs.REQUEST_ID));
-        post.addHeader(ONAPLogConstants.Headers.INVOCATION_ID, UUID.randomUUID().toString());
-        addAuthorizationHeader(post);
-    }
-
-    @Override
-    public HttpResponse post(String jsonReq) throws IOException {
-        HttpPost post = new HttpPost(url);
-        logger.debug(CAMUNDA_URL_MESAGE + url);
-
-        StringEntity input = new StringEntity(jsonReq);
-        input.setContentType(CommonConstants.CONTENT_TYPE_JSON);
-        setupHeaders(post);
-        addAuthorizationHeader(post);
-        post.setEntity(input);
-        HttpResponse response = client.execute(post);
-        logger.debug(CAMUNDA_RESPONSE, response);
-
-        return response;
+        return post(jsonReq, orchestrationURI);
     }
 
-    @Override
-    public HttpResponse post(RequestClientParameter parameterObject) throws IOException {
-        HttpPost post = new HttpPost(url);
-        logger.debug(CAMUNDA_URL_MESAGE + url);
+    public ResponseEntity<String> post(RequestClientParameter parameterObject, String orchestrationURI)
+            throws ApiException {
         String jsonReq = wrapVIDRequest(parameterObject.getRequestId(), parameterObject.isBaseVfModule(),
                 parameterObject.getRecipeTimeout(), parameterObject.getRequestAction(),
                 parameterObject.getServiceInstanceId(), parameterObject.getPnfCorrelationId(),
@@ -113,26 +92,44 @@ public class CamundaClient extends RequestClient {
                 parameterObject.getRequestUri(), parameterObject.getRecipeParamXsd(),
                 parameterObject.getInstanceGroupId(), parameterObject.isGenerateIdsOnly());
 
-        StringEntity input = new StringEntity(jsonReq);
-        input.setContentType(CommonConstants.CONTENT_TYPE_JSON);
-        setupHeaders(post);
-        addAuthorizationHeader(post);
-        post.setEntity(input);
-        HttpResponse response = client.execute(post);
-        logger.debug(CAMUNDA_RESPONSE, response);
+        return post(jsonReq, orchestrationURI);
+    }
 
-        return response;
+    public ResponseEntity<String> get(String url) throws ApiException {
+        url = env.getRequiredProperty(CommonConstants.CAMUNDA_URL) + url;
+        HttpEntity<?> requestEntity = new HttpEntity<>(setHeaders());
+        try {
+            return restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);
+        } catch (HttpStatusCodeException e) {
+            logger.error("Error returned from sending GET request to BPMN", e);
+            throw createBPMNFailureException(e);
+        } catch (ResourceAccessException e) {
+            logger.error("Error sending GET to BPMN", e);
+            ClientConnectionException clientException = new ClientConnectionException.Builder(url,
+                    HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).build();
+            throw clientException;
+        }
     }
 
-    @Override
-    public HttpResponse get() {
-        return null;
+    public ResponseEntity<String> post(String jsonReq, String url) throws ApiException {
+        url = env.getRequiredProperty(CommonConstants.CAMUNDA_URL) + url;
+        HttpEntity<String> request = new HttpEntity<String>(jsonReq, setHeaders());
+        try {
+            return restTemplate.postForEntity(url, request, String.class);
+        } catch (HttpStatusCodeException e) {
+            logger.error("Error returned after sending POST request to BPMN", e);
+            throw createBPMNFailureException(e);
+        } catch (ResourceAccessException e) {
+            logger.error("Error sending POST to BPMN", e);
+            ClientConnectionException clientException = new ClientConnectionException.Builder(url,
+                    HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).build();
+            throw clientException;
+        }
     }
 
     protected String wrapRequest(String reqXML, String requestId, String serviceInstanceId, String requestTimeout,
-            String schemaVersion) {
+            String schemaVersion, String url) {
         String jsonReq = null;
-
         try {
             CamundaRequest camundaRequest = new CamundaRequest();
             CamundaInput camundaInput = new CamundaInput();
@@ -142,7 +139,7 @@ public class CamundaClient extends RequestClient {
             CamundaInput svcid = new CamundaInput();
             CamundaInput timeout = new CamundaInput();
             camundaInput.setValue(StringUtils.defaultString(reqXML));
-            host.setValue(parseURL());
+            host.setValue(CommonConstants.CAMUNDA_URL);
             schema.setValue(StringUtils.defaultString(schemaVersion));
             reqid.setValue(requestId);
             svcid.setValue(serviceInstanceId);
@@ -160,7 +157,7 @@ public class CamundaClient extends RequestClient {
             jsonReq = mapper.writeValueAsString(camundaRequest);
             logger.trace("request body is {}", jsonReq);
         } catch (Exception e) {
-            logger.error("Error in APIH Warp request", e);
+            logger.error("Error in APIH Wrap request", e);
         }
         return jsonReq;
     }
@@ -254,35 +251,53 @@ public class CamundaClient extends RequestClient {
             jsonReq = mapper.writeValueAsString(camundaRequest);
             logger.trace("request body is {}", jsonReq);
         } catch (Exception e) {
-            logger.error("Error in APIH Warp request", e);
+            logger.error("Error in wrapVIDRequest", e);
         }
         return jsonReq;
     }
 
-    private String parseURL() {
-        String[] parts = url.split(":");
-        String host = "";
-        if (parts.length >= 2) {
-            host = parts[1];
-            if (host.length() > 2) {
-                host = host.substring(2);
+    protected HttpHeaders setHeaders() {
+        HttpHeaders headers = new HttpHeaders();
+        List<org.springframework.http.MediaType> acceptableMediaTypes = new ArrayList<>();
+        acceptableMediaTypes.add(org.springframework.http.MediaType.APPLICATION_JSON);
+        headers.setAccept(acceptableMediaTypes);
+        headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON);
+        headers.add(HttpHeaders.AUTHORIZATION, addAuthorizationHeader(env.getRequiredProperty("mso.camundaAuth"),
+                env.getRequiredProperty("mso.msoKey")));
+        return headers;
+    }
+
+    protected String addAuthorizationHeader(String auth, String msoKey) {
+        String basicAuth = null;
+        try {
+            String userCredentials = CryptoUtils.decrypt(auth, msoKey);
+            if (userCredentials != null) {
+                basicAuth = BASIC + DatatypeConverter.printBase64Binary(userCredentials.getBytes());
             }
+        } catch (GeneralSecurityException e) {
+            logger.error("Security exception", e);
         }
-        return host;
+        return basicAuth;
     }
 
-    private void addAuthorizationHeader(HttpPost post) {
-        String encryptedCredentials;
-        if (props != null) {
-            encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH);
-            if (encryptedCredentials != null) {
-                String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH,
-                        props.getProperty(CommonConstants.ENCRYPTION_KEY_PROP));
-                if (userCredentials != null) {
-                    post.addHeader(AUTHORIZATION,
-                            BASIC + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes())));
-                }
-            }
+    protected BPMNFailureException createBPMNFailureException(HttpStatusCodeException e) {
+        ObjectMapper mapper = new ObjectMapper();
+        String responseText = null;
+        String message = null;
+        try {
+            CamundaResponse response = mapper.readValue(e.getResponseBodyAsString(), CamundaResponse.class);
+            responseText = response.getResponse();
+        } catch (IOException ex) {
+            responseText = e.getResponseBodyAsString();
+        }
+        message = String.valueOf(e.getStatusCode());
+        if (responseText != null && !responseText.isEmpty()) {
+            message = message + " " + responseText;
         }
+        BPMNFailureException bpmnException =
+                new BPMNFailureException.Builder(message, responseHandler.setStatus(e.getStatusCode().value()),
+                        ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, e.getStatusCode()).build();
+        return bpmnException;
     }
+
 }
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaTaskClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaTaskClient.java
deleted file mode 100644 (file)
index d6d999b..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Modifications Copyright (c) 2019 Samsung
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.apihandler.common;
-
-import java.io.IOException;
-import javax.xml.bind.DatatypeConverter;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class CamundaTaskClient extends RequestClient {
-    private static Logger logger = LoggerFactory.getLogger(CamundaTaskClient.class);
-
-    public CamundaTaskClient() {
-        super(CommonConstants.CAMUNDATASK);
-    }
-
-    @Override
-    public HttpResponse post(String jsonReq) throws IOException {
-        HttpPost post = new HttpPost(url);
-        logger.debug("Camunda Task url is: {}", url);
-
-        StringEntity input = new StringEntity(jsonReq);
-        input.setContentType(CommonConstants.CONTENT_TYPE_JSON);
-
-        String encryptedCredentials;
-        if (props != null) {
-            encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH);
-            if (encryptedCredentials != null) {
-                String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH,
-                        props.getProperty(CommonConstants.ENCRYPTION_KEY_PROP));
-                if (userCredentials != null) {
-                    post.addHeader("Authorization",
-                            "Basic " + DatatypeConverter.printBase64Binary(userCredentials.getBytes()));
-                }
-            }
-        }
-
-        post.setEntity(input);
-        return client.execute(post);
-    }
-
-    @Override
-    public HttpResponse post(String camundaReqXML, String requestId, String requestTimeout, String schemaVersion,
-            String serviceInstanceId, String action) {
-        throw new UnsupportedOperationException("Method not supported.");
-    }
-
-    @Override
-    public HttpResponse post(RequestClientParameter params) {
-        throw new UnsupportedOperationException("Method not supported.");
-    }
-
-    @Override
-    public HttpResponse get() throws IOException {
-        HttpGet get = new HttpGet(url);
-        logger.debug("Camunda Task url is: {}", url);
-        String encryptedCredentials;
-        if (props != null) {
-            encryptedCredentials = props.getProperty(CommonConstants.CAMUNDA_AUTH);
-            if (encryptedCredentials != null) {
-                String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH,
-                        props.getProperty(CommonConstants.ENCRYPTION_KEY_PROP));
-                if (userCredentials != null) {
-                    get.addHeader("Authorization",
-                            "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes())));
-                }
-            }
-        }
-        return client.execute(get);
-    }
-
-}
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/RequestClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/RequestClient.java
deleted file mode 100644 (file)
index 318b3ba..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Modifications Copyright (c) 2019 Samsung
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.apihandler.common;
-
-import java.io.IOException;
-import java.security.GeneralSecurityException;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.onap.so.utils.CryptoUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.core.env.Environment;
-
-public abstract class RequestClient {
-    private static Logger logger = LoggerFactory.getLogger(RequestClient.class);
-    protected Environment props;
-    protected String url;
-    protected HttpClient client;
-    private int type;
-
-    public RequestClient(int type) {
-        this.type = type;
-    }
-
-    public void setProps(Environment env) {
-        this.props = env;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public int getType() {
-        return type;
-    }
-
-    public HttpClient getClient() {
-        return client;
-    }
-
-    public void setClient(HttpClient client) {
-        this.client = client;
-    }
-
-    public abstract HttpResponse post(String request, String requestId, String requestTimeout, String schemaVersion,
-            String serviceInstanceId, String action) throws IOException;
-
-    public abstract HttpResponse post(String request) throws IOException;
-
-    public abstract HttpResponse post(RequestClientParameter parameterObject) throws IOException;
-
-    public abstract HttpResponse get() throws IOException;
-
-    protected String getEncryptedPropValue(String prop, String defaultValue, String encryptionKey) {
-        try {
-            return CryptoUtils.decrypt(prop, encryptionKey);
-        } catch (GeneralSecurityException e) {
-            logger.debug("Security exception", e);
-        }
-        return defaultValue;
-    }
-}
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/RequestClientFactory.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/RequestClientFactory.java
deleted file mode 100644 (file)
index c2ffa7e..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Modifications Copyright (c) 2019 Samsung
- * ================================================================================
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.apihandler.common;
-
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Component;
-
-@Component
-public class RequestClientFactory {
-
-    @Autowired
-    private Environment env;
-
-    // based on URI, returns BPEL, CamundaTask or Camunda client
-    public RequestClient getRequestClient(String orchestrationURI) {
-        RequestClient retClient;
-
-        String url;
-        if (orchestrationURI.contains(CommonConstants.TASK_SEARCH_STR)) {
-            url = env.getProperty(CommonConstants.CAMUNDA_URL) + orchestrationURI;
-            retClient = new CamundaTaskClient();
-        } else {
-            url = env.getProperty(CommonConstants.CAMUNDA_URL) + orchestrationURI;
-            retClient = new CamundaClient();
-        }
-        retClient.setClient(HttpClientBuilder.create().build());
-        retClient.setProps(env);
-        retClient.setUrl(url);
-        return retClient;
-
-    }
-
-    public Environment getEnv() {
-        return env;
-    }
-
-    public void setEnv(Environment env) {
-        this.env = env;
-    }
-
-
-
-}
index 8066460..af1258e 100644 (file)
@@ -24,144 +24,55 @@ package org.onap.so.apihandler.common;
 
 
 import java.io.IOException;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
-import org.apache.http.util.EntityUtils;
 import org.onap.so.apihandler.camundabeans.CamundaResponse;
-import org.onap.so.apihandlerinfra.Constants;
-import org.onap.so.apihandlerinfra.exceptions.ApiException;
 import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
-import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
-import org.onap.logging.filter.base.ErrorCode;
-import org.onap.so.logger.MessageEnum;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import com.fasterxml.jackson.databind.ObjectMapper;
 
-public class ResponseHandler {
 
-    private CamundaResponse response;
-    private int status;
-    private String responseBody = "";
-    private HttpResponse httpResponse;
-    private int type;
+@Component
+public class ResponseHandler {
     private static Logger logger = LoggerFactory.getLogger(ResponseHandler.class);
 
-    public ResponseHandler(HttpResponse httpResponse, int type) throws ApiException {
-        this.httpResponse = httpResponse;
-        this.type = type;
-        parseResponse();
-    }
-
-
-    private void parseResponse() throws ApiException {
-        int statusCode = httpResponse.getStatusLine().getStatusCode();
-        status = setStatus(statusCode);
-        if (type == CommonConstants.CAMUNDA) {
-            parseCamunda();
-        } else if (type == CommonConstants.CAMUNDATASK) {
-            parseCamundaTask();
-        } else {
-            parseBpel();
-        }
-
-    }
-
-
-
-    private void parseCamunda() throws ApiException {
-        try {
-            HttpEntity entity = httpResponse.getEntity();
-            responseBody = EntityUtils.toString(entity);
-        } catch (IOException e) {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
-                            .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-
-            throw new ValidateException.Builder("IOException getting Camunda response body", HttpStatus.SC_BAD_REQUEST,
-                    ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
-        }
-
+    public CamundaResponse getCamundaResponse(ResponseEntity<String> camundaResponse) throws ValidateException {
+        String responseBody = camundaResponse.getBody();
+        CamundaResponse response = null;
         ObjectMapper mapper = new ObjectMapper();
         try {
             response = mapper.readValue(responseBody, CamundaResponse.class);
-        } catch (IOException e) {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, ErrorCode.SchemaError)
-                            .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-
-            throw new ValidateException.Builder("Cannot parse Camunda Response", HttpStatus.SC_BAD_REQUEST,
-                    ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
-        }
-        if (response != null) {
-            responseBody = response.getResponse();
-        } else {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_ERROR_FROM_BPEL_SERVER, ErrorCode.BusinessProcessError)
-                            .targetEntity("Camunda").targetServiceName("parseCamunda").build();
-            BPMNFailureException bpmnFailureException =
-                    new BPMNFailureException.Builder(String.valueOf(status), status, ErrorNumbers.ERROR_FROM_BPEL)
-                            .errorInfo(errorLoggerInfo).build();
+        } catch (IOException | NullPointerException e) {
+            logger.error("Cannot parse Camunda Response: ", e);
+            throw new ValidateException.Builder(
+                    "Cannot parse Camunda ResponseBody. BPMN HTTP status: " + camundaResponse.getStatusCodeValue(),
+                    HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).cause(e).build();
         }
+        return response;
     }
 
-    private void parseBpel() throws ApiException {
-
-        HttpEntity bpelEntity = httpResponse.getEntity();
-
-        try {
-            if (bpelEntity != null) {
-                responseBody = EntityUtils.toString(bpelEntity);
-
-            }
-        } catch (IOException e) {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_GENERAL_EXCEPTION, ErrorCode.DataError).build();
-
-            throw new ValidateException.Builder("Could not convert BPEL response to string", HttpStatus.SC_BAD_REQUEST,
-                    ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
-        }
+    public void acceptedResponse(ResponseEntity<String> response) throws BPMNFailureException {
+        int status = setStatus(response.getStatusCodeValue());
         if (status != HttpStatus.SC_ACCEPTED) {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_ERROR_FROM_BPEL_SERVER, ErrorCode.BusinessProcessError)
-                            .targetEntity("BPEL").targetServiceName("parseBpel").build();
-
-            throw new BPMNFailureException.Builder(String.valueOf(status), status, ErrorNumbers.ERROR_FROM_BPEL)
-                    .errorInfo(errorLoggerInfo).build();
+            logger.info("Camunda did not return a valid response");
+            throw new BPMNFailureException.Builder(String.valueOf(status), HttpStatus.SC_INTERNAL_SERVER_ERROR,
+                    ErrorNumbers.ERROR_FROM_BPEL).build();
         }
-
     }
 
-    private void parseCamundaTask() throws ApiException {
-
-        HttpEntity camundataskEntity = httpResponse.getEntity();
-
-        try {
-            if (camundataskEntity != null) {
-                responseBody = EntityUtils.toString(camundataskEntity);
-            }
-        } catch (IOException e) {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_GENERAL_EXCEPTION, ErrorCode.DataError).build();
-
-            throw new ValidateException.Builder("Could not convert CamundaTask response to string",
-                    HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo)
-                            .build();
-        }
+    public void acceptedOrNoContentResponse(ResponseEntity<String> response) throws BPMNFailureException {
+        int status = setStatus(response.getStatusCodeValue());
         if (status != HttpStatus.SC_NO_CONTENT && status != HttpStatus.SC_ACCEPTED) {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_ERROR_FROM_BPEL_SERVER, ErrorCode.BusinessProcessError)
-                            .targetEntity("CAMUNDATASK").targetServiceName("parseCamundaTask").build();
-
-            throw new BPMNFailureException.Builder(String.valueOf(status), status, ErrorNumbers.ERROR_FROM_BPEL)
-                    .errorInfo(errorLoggerInfo).build();
+            logger.info("Camunda did not return a valid response");
+            throw new BPMNFailureException.Builder(String.valueOf(status), HttpStatus.SC_INTERNAL_SERVER_ERROR,
+                    ErrorNumbers.ERROR_FROM_BPEL).build();
         }
-
     }
 
-    private int setStatus(int statusCode) {
+    public int setStatus(int statusCode) {
         int httpStatus;
         switch (statusCode) {
             case HttpStatus.SC_ACCEPTED:
@@ -193,30 +104,4 @@ public class ResponseHandler {
         }
         return httpStatus;
     }
-
-
-    public CamundaResponse getResponse() {
-        return response;
-    }
-
-
-    public void setResponse(CamundaResponse response) {
-        this.response = response;
-    }
-
-
-    public String getResponseBody() {
-        return responseBody;
-    }
-
-
-    public void setResponseBody(String responseBody) {
-        this.responseBody = responseBody;
-    }
-
-
-    public int getStatus() {
-        return status;
-    }
-
 }
index ab2ce10..2ca18de 100644 (file)
@@ -23,6 +23,7 @@ package org.onap.so.apihandlerinfra.exceptions;
 
 import java.util.List;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
+import org.springframework.http.HttpStatus;
 
 public abstract class ApiException extends Exception {
     /**
@@ -32,17 +33,16 @@ public abstract class ApiException extends Exception {
     private int httpResponseCode = 500;
     private String messageID;
     private ErrorLoggerInfo errorLoggerInfo;
-
+    private HttpStatus originalHttpResponseCode;
     private List<String> variables;
 
     public ApiException(Builder builder) {
         super(builder.message, builder.cause);
-
         this.httpResponseCode = builder.httpResponseCode;
         this.messageID = builder.messageID;
         this.variables = builder.variables;
         this.errorLoggerInfo = builder.errorLoggerInfo;
-        this.variables = builder.variables;
+        this.originalHttpResponseCode = builder.originalHttpResponseCode;
     }
 
     public ApiException(String message, Throwable cause) {
@@ -54,6 +54,12 @@ public abstract class ApiException extends Exception {
         this.httpResponseCode = httpResponseCode;
     }
 
+    public ApiException(String message, int httpResponseCode, HttpStatus original) {
+        super(message);
+        this.httpResponseCode = httpResponseCode;
+        this.originalHttpResponseCode = original;
+    }
+
     public ApiException(String message) {
         super(message);
     }
@@ -75,13 +81,17 @@ public abstract class ApiException extends Exception {
         return variables;
     }
 
+    public HttpStatus getOriginalHttpResponseCode() {
+        return originalHttpResponseCode;
+    }
+
     public static class Builder<T extends Builder<T>> {
         private String message;
         private Throwable cause = null;
         private int httpResponseCode;
         private String messageID;
+        private HttpStatus originalHttpResponseCode;
         private ErrorLoggerInfo errorLoggerInfo = null;
-
         private List<String> variables = null;
 
         public Builder(String message, int httpResponseCode, String messageID) {
@@ -90,6 +100,13 @@ public abstract class ApiException extends Exception {
             this.messageID = messageID;
         }
 
+        public Builder(String message, int httpResponseCode, String messageID, HttpStatus originalHttpResponseCode) {
+            this.message = message;
+            this.httpResponseCode = httpResponseCode;
+            this.messageID = messageID;
+            this.originalHttpResponseCode(originalHttpResponseCode);
+        }
+
         public T message(String message) {
             this.message = message;
             return (T) this;
@@ -119,5 +136,10 @@ public abstract class ApiException extends Exception {
             this.variables = variables;
             return (T) this;
         }
+
+        public T originalHttpResponseCode(HttpStatus originalHttpResponseCode) {
+            this.originalHttpResponseCode = originalHttpResponseCode;
+            return (T) this;
+        }
     }
 }
index 97d46bd..0d2b9be 100644 (file)
@@ -20,6 +20,8 @@
 
 package org.onap.so.apihandlerinfra.exceptions;
 
+import org.springframework.http.HttpStatus;
+
 public class BPMNFailureException extends ApiException {
 
     private static final String bpmnFailMessage = "Request Failed due to BPEL error with HTTP Status = $HTTPSTATUS";
@@ -35,6 +37,12 @@ public class BPMNFailureException extends ApiException {
             super(bpmnFailMessage.replaceAll("\\$HTTPSTATUS", message), httpResponseCode, messageID);
         }
 
+        public Builder(String message, int httpResponseCode, String messageID, HttpStatus originalHttpResponseCode) {
+            super(bpmnFailMessage.replaceAll("\\$HTTPSTATUS", message), httpResponseCode, messageID,
+                    originalHttpResponseCode);
+        }
+
+
         public BPMNFailureException build() {
             return new BPMNFailureException(this);
         }
index 4af5289..9ef2072 100644 (file)
@@ -26,7 +26,7 @@ public class ClientConnectionException extends ApiException {
     * 
     */
     private static final long serialVersionUID = 1L;
-    private static final String clientFailMessage = "Client from $URL failed to connect";
+    private static final String clientFailMessage = "Client from $URL failed to connect or respond";
 
     private ClientConnectionException(Builder builder) {
         super(builder);
index 94c62a9..e51f0e2 100644 (file)
 package org.onap.so.apihandler.common;
 
 
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.when;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.ProtocolVersion;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.message.BasicHttpResponse;
-import org.apache.http.message.BasicStatusLine;
-import org.junit.Assert;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
-import org.mockito.ArgumentCaptor;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
 import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.so.apihandlerinfra.exceptions.ApiException;
+import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException;
+import org.onap.so.apihandlerinfra.exceptions.ClientConnectionException;
 import org.skyscreamer.jsonassert.JSONAssert;
-import org.springframework.mock.env.MockEnvironment;
-import com.fasterxml.jackson.core.JsonGenerationException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-
-/**
- * This class implements test methods of Camunda Beans.
- *
- *
- */
+import org.springframework.core.env.Environment;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.web.client.HttpServerErrorException;
+import org.springframework.web.client.ResourceAccessException;
+import org.springframework.web.client.RestTemplate;
+
+@RunWith(MockitoJUnitRunner.class)
 public class CamundaClientTest {
 
-
-
     @Mock
-    private HttpClient mockHttpClient;
-    private static final String AUTHORIZATION_HEADER_NAME = "Authorization";
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-    }
-
-    @Test
-    public void tesCamundaPost() throws JsonGenerationException, JsonMappingException, IOException {
-
-
-        String responseBody =
-                "{\"links\":[{\"method\":\"GET\",\"href\":\"http://localhost:9080/engine-rest/process-instance/2047c658-37ae-11e5-9505-7a1020524153\",\"rel\":\"self\"}],\"id\":\"2047c658-37ae-11e5-9505-7a1020524153\",\"definitionId\":\"dummy:10:73298961-37ad-11e5-9505-7a1020524153\",\"businessKey\":null,\"caseInstanceId\":null,\"ended\":true,\"suspended\":false}";
-
-        HttpResponse mockResponse = createResponse(200, responseBody);
-        mockHttpClient = Mockito.mock(HttpClient.class);
-        ArgumentCaptor<HttpPost> httpPostCaptor = ArgumentCaptor.forClass(HttpPost.class);
-        Mockito.when(mockHttpClient.execute(Mockito.any(HttpPost.class))).thenReturn(mockResponse);
-
-        String reqXML = "<xml>test</xml>";
-        String orchestrationURI = "/engine-rest/process-definition/key/dummy/start";
-        MockEnvironment environment = new MockEnvironment();
-
-        environment.setProperty("mso.camundaUR", "yourValue1");
-        environment.setProperty("mso.camundaAuth",
-                "E8E19DD16CC90D2E458E8FF9A884CC0452F8F3EB8E321F96038DE38D5C1B0B02DFAE00B88E2CF6E2A4101AB2C011FC161212EE");
-        environment.setProperty("org.onap.so.adapters.network.encryptionKey", "aa3871669d893c7fb8abbcda31b88b4f");
-
-
-        RequestClientFactory reqClientFactory = new RequestClientFactory();
-        reqClientFactory.setEnv(environment);
-        RequestClient requestClient = reqClientFactory.getRequestClient(orchestrationURI);
-
-        requestClient.setClient(mockHttpClient);
-        HttpResponse response = requestClient.post(reqXML, "reqId", "timeout", "version", null, null);
+    private RestTemplate restTemplate;
 
+    @Mock
+    private Environment env;
 
-        int statusCode = response.getStatusLine().getStatusCode();
-        assertEquals(requestClient.getType(), CommonConstants.CAMUNDA);
-        assertEquals(statusCode, HttpStatus.SC_OK);
+    @Spy
+    private ResponseHandler responseHandler;
 
+    @Spy
+    @InjectMocks
+    private CamundaClient client;
 
-        requestClient = reqClientFactory.getRequestClient(orchestrationURI);
-        requestClient.setClient(mockHttpClient);
-        response = requestClient.post(null, "reqId", null, null, null, null);
-        assertEquals(requestClient.getType(), CommonConstants.CAMUNDA);
-        assertEquals(statusCode, HttpStatus.SC_OK);
-        verify(mockHttpClient, times(2)).execute(httpPostCaptor.capture());
-        assertThat(httpPostCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)).isNotEmpty();
-        Assert.assertEquals("Basic YXBpaEJwbW46Y2FtdW5kYS1SMTUxMiE=",
-                httpPostCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)[0].getValue());
-    }
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
 
-    private HttpResponse createResponse(int respStatus, String respBody) {
-        HttpResponse response =
-                new BasicHttpResponse(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), respStatus, ""));
-        response.setStatusCode(respStatus);
-        try {
-            response.setEntity(new StringEntity(respBody));
-            response.setHeader("Content-Type", "application/json");
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return response;
+    @Before
+    public void setup() {
+        when(env.getRequiredProperty("mso.camundaAuth"))
+                .thenReturn("015E7ACF706C6BBF85F2079378BDD2896E226E09D13DC2784BA309E27D59AB9FAD3A5E039DF0BB8408");
+        when(env.getRequiredProperty("mso.msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7");
+        when(env.getRequiredProperty("mso.camundaURL")).thenReturn("http://localhost:8080");
     }
 
     public String inputStream(String JsonInput) throws IOException {
@@ -136,10 +88,37 @@ public class CamundaClientTest {
     }
 
     @Test
-    public void wrapVIDRequestTest() throws IOException {
-        CamundaClient testClient = new CamundaClient();
-        testClient.setUrl("/mso/async/services/CreateGenericALaCarteServiceInstance");
+    public void createBPMNFailureExceptionNoResponseBodyTest() {
+        HttpServerErrorException e = new HttpServerErrorException(HttpStatus.NOT_FOUND);
+        BPMNFailureException ex = client.createBPMNFailureException(e);
+        assertEquals(HttpStatus.NOT_IMPLEMENTED.value(), ex.getHttpResponseCode());
+        assertEquals("Request Failed due to BPEL error with HTTP Status = 404 NOT_FOUND", ex.getMessage());
+    }
+
+    @Test
+    public void createBPMNFailureExceptionWithCamundaResponseTest() throws IOException {
+        HttpClientErrorException e = new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR, null,
+                inputStream("/CamundaFailure.json").getBytes(), null);
+        BPMNFailureException ex = client.createBPMNFailureException(e);
+        assertEquals(HttpStatus.BAD_GATEWAY.value(), ex.getHttpResponseCode());
+        assertEquals(
+                "Request Failed due to BPEL error with HTTP Status = 500 INTERNAL_SERVER_ERROR <aetgt:WorkflowException xmlns:aetgt=\"http://org.onap/so/workflow/schema/v1\"><aetgt:ErrorMessage>Exception in create execution list 500 </aetgt:ErrorMessage><aetgt:ErrorCode>7000</aetgt:ErrorCode></aetgt:WorkflowException>",
+                ex.getMessage());
+    }
+
+    @Test
+    public void createBPMNFailureExceptionTest() throws IOException {
+        String response = "Request failed";
+        HttpClientErrorException e =
+                new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR, null, response.getBytes(), null);
+        BPMNFailureException ex = client.createBPMNFailureException(e);
+        assertEquals(HttpStatus.BAD_GATEWAY.value(), ex.getHttpResponseCode());
+        assertEquals("Request Failed due to BPEL error with HTTP Status = 500 INTERNAL_SERVER_ERROR Request failed",
+                ex.getMessage());
+    }
 
+    @Test
+    public void wrapVIDRequestTest() throws IOException {
         String requestId = "f7ce78bb-423b-11e7-93f8-0050569a796";
         boolean isBaseVfModule = true;
         int recipeTimeout = 10000;
@@ -161,7 +140,7 @@ public class CamundaClientTest {
         String requestUri = "v7/serviceInstances/assign";
         String instanceGroupId = "ff305d54-75b4-431b-adb2-eb6b9e5ff000";
 
-        String testResult = testClient.wrapVIDRequest(requestId, isBaseVfModule, recipeTimeout, requestAction,
+        String testResult = client.wrapVIDRequest(requestId, isBaseVfModule, recipeTimeout, requestAction,
                 serviceInstanceId, pnfCorrelationId, vnfId, vfModuleId, volumeGroupId, networkId, configurationId,
                 serviceType, vnfType, vfModuleType, networkType, requestDetails, apiVersion, aLaCarte, requestUri, "",
                 instanceGroupId, false);
@@ -171,39 +150,43 @@ public class CamundaClientTest {
     }
 
     @Test
-    public void testPost() throws Exception {
-        CamundaClient testClient = new CamundaClient();
-        String orchestrationURI = "/engine-rest/process-definition/key/dummy/start";
-        MockEnvironment environment = new MockEnvironment();
-
-        environment.setProperty("mso.camundaUR", "yourValue1");
-        testClient.setProps(environment);
-        testClient.setClient(mockHttpClient);
-
-        testClient.setUrl(orchestrationURI);
-
-        String responseBody =
-                "{\"links\":[{\"method\":\"GET\",\"href\":\"http://localhost:9080/engine-rest/process-instance/2047c658-37ae-11e5-9505-7a1020524153\",\"rel\":\"self\"}],\"id\":\"2047c658-37ae-11e5-9505-7a1020524153\",\"definitionId\":\"dummy:10:73298961-37ad-11e5-9505-7a1020524153\",\"businessKey\":null,\"caseInstanceId\":null,\"ended\":true,\"suspended\":false}";
-        assertNull(testClient.post(responseBody));
-
+    public void getClientConnectionExceptionTest() throws ApiException {
+        doThrow(ResourceAccessException.class).when(restTemplate).exchange(eq("http://localhost:8080/path"),
+                eq(HttpMethod.GET), any(HttpEntity.class), eq(String.class));
+        thrown.expect(ClientConnectionException.class);
+        thrown.expectMessage("Client from http://localhost:8080/path failed to connect or respond");
+        client.get("/path");
     }
 
     @Test
-    public void testPostWithRequestClientParameter() throws Exception {
-        CamundaClient testClient = new CamundaClient();
-        String orchestrationURI = "/engine-rest/process-definition/key/dummy/start";
-        HttpResponse mockResponse = createResponse(200, "{}");
-        mockHttpClient = Mockito.mock(HttpClient.class);
-        Mockito.when(mockHttpClient.execute(Mockito.any(HttpPost.class))).thenReturn(mockResponse);
-
-        testClient.setClient(mockHttpClient);
-        testClient.setUrl(orchestrationURI);
-
-        HttpResponse response = testClient.post(new RequestClientParameter.Builder().build());
-
-        assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
+    public void postClientConnectionExceptionTest() throws ApiException, IOException {
+        String jsonReq = inputStream("/WrappedVIDRequest.json");
+        doThrow(ResourceAccessException.class).when(restTemplate).postForEntity(eq("http://localhost:8080/path"),
+                any(HttpEntity.class), eq(String.class));
+        thrown.expect(ClientConnectionException.class);
+        thrown.expectMessage("Client from http://localhost:8080/path failed to connect or respond");
+        client.post(jsonReq, "/path");
+    }
 
+    @Test
+    public void getHttpStatusCodeExceptionTest() throws ApiException {
+        HttpServerErrorException e = new HttpServerErrorException(HttpStatus.NOT_FOUND);
+        doThrow(e).when(restTemplate).exchange(eq("http://localhost:8080/path"), eq(HttpMethod.GET),
+                any(HttpEntity.class), eq(String.class));
+        thrown.expect(BPMNFailureException.class);
+        thrown.expectMessage("Request Failed due to BPEL error with HTTP Status = 404 NOT_FOUND");
+        client.get("/path");
     }
 
+    @Test
+    public void postHttpStatusCodeExceptionTest() throws ApiException, IOException {
+        HttpServerErrorException e = new HttpServerErrorException(HttpStatus.NOT_FOUND);
+        String jsonReq = inputStream("/WrappedVIDRequest.json");
+        doThrow(e).when(restTemplate).postForEntity(eq("http://localhost:8080/path"), any(HttpEntity.class),
+                eq(String.class));
+        thrown.expect(BPMNFailureException.class);
+        thrown.expectMessage("Request Failed due to BPEL error with HTTP Status = 404 NOT_FOUND");
+        client.post(jsonReq, "/path");
+    }
 
 }
diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java
deleted file mode 100644 (file)
index 9e9ab60..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.apihandler.common;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import org.apache.http.HttpEntity;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.methods.HttpRequestBase;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.springframework.core.env.Environment;
-
-@RunWith(MockitoJUnitRunner.class)
-public class CamundaTaskClientTest {
-
-    @Mock
-    private Environment env;
-    private CamundaTaskClient testedObject = new CamundaTaskClient();
-    private HttpClient httpClientMock;
-    private static final String JSON_REQUEST = "{\"value1\": \"aaa\",\"value2\": \"bbb\"}";
-    private static final String URL_SCHEMA = "http";
-    private static final String HOST = "testhost";
-    private static final int PORT = 1234;
-    private static final String URL_PATH = "/requestMethodSuccessful";
-    private static final String URL = URL_SCHEMA + "://" + HOST + ":" + PORT + URL_PATH;
-    private static final String AUTHORIZATION_HEADER_NAME = "Authorization";
-
-    @Before
-    public void init() {
-        when(env.getProperty(eq(CommonConstants.CAMUNDA_AUTH))).thenReturn(
-                "E8E19DD16CC90D2E458E8FF9A884CC0452F8F3EB8E321F96038DE38D5C1B0B02DFAE00B88E2CF6E2A4101AB2C011FC161212EE");
-        when(env.getProperty(eq(CommonConstants.ENCRYPTION_KEY_PROP))).thenReturn("aa3871669d893c7fb8abbcda31b88b4f");
-        testedObject = new CamundaTaskClient();
-        httpClientMock = mock(HttpClient.class);
-        testedObject.setClient(httpClientMock);
-        testedObject.setUrl(URL);
-    }
-
-    @Test
-    public void postMethodSuccessful() throws IOException {
-        ArgumentCaptor<HttpPost> httpPostCaptor = ArgumentCaptor.forClass(HttpPost.class);
-        testedObject.post(JSON_REQUEST);
-        verify(httpClientMock).execute(httpPostCaptor.capture());
-        checkUri(httpPostCaptor.getValue());
-        assertThat(httpPostCaptor.getValue().getEntity().getContentType().getValue())
-                .isEqualTo(CommonConstants.CONTENT_TYPE_JSON);
-        assertThat(getJsonFromEntity(httpPostCaptor.getValue().getEntity())).isEqualTo(JSON_REQUEST);
-    }
-
-    @Test
-    public void postMethodSuccessfulWithCredentials() throws IOException {
-        ArgumentCaptor<HttpPost> httpPostCaptor = ArgumentCaptor.forClass(HttpPost.class);
-        testedObject.setProps(env);
-        testedObject.post(JSON_REQUEST);
-        verify(httpClientMock).execute(httpPostCaptor.capture());
-        assertThat(httpPostCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)).isNotEmpty();
-        Assert.assertEquals("Basic YXBpaEJwbW46Y2FtdW5kYS1SMTUxMiE=",
-                httpPostCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)[0].getValue());
-    }
-
-    @Test
-    public void getMethodSuccessful() throws IOException {
-        ArgumentCaptor<HttpGet> httpGetCaptor = ArgumentCaptor.forClass(HttpGet.class);
-        testedObject.get();
-        verify(httpClientMock).execute(httpGetCaptor.capture());
-        checkUri(httpGetCaptor.getValue());
-    }
-
-    @Test
-    public void getMethodSuccessfulWithCredentials() throws IOException {
-        ArgumentCaptor<HttpGet> httpGetCaptor = ArgumentCaptor.forClass(HttpGet.class);
-        testedObject.setUrl(URL);
-        testedObject.setProps(env);
-        testedObject.get();
-        verify(httpClientMock).execute(httpGetCaptor.capture());
-        assertThat(httpGetCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)).isNotEmpty();
-        Assert.assertEquals("Basic YXBpaEJwbW46Y2FtdW5kYS1SMTUxMiE=",
-                httpGetCaptor.getValue().getHeaders(AUTHORIZATION_HEADER_NAME)[0].getValue());
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void postMethodUnsupported() {
-        testedObject.post("", "", "", "", "", "");
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void postMethodUnsupported2() {
-        testedObject.post(new RequestClientParameter.Builder().build());
-    }
-
-    private void checkUri(HttpRequestBase httpRequestBase) {
-        assertThat(httpRequestBase.getURI().getScheme()).isEqualTo(URL_SCHEMA);
-        assertThat(httpRequestBase.getURI().getHost()).isEqualTo(HOST);
-        assertThat(httpRequestBase.getURI().getPort()).isEqualTo(PORT);
-        assertThat(httpRequestBase.getURI().getPath()).isEqualTo(URL_PATH);
-    }
-
-    private String getJsonFromEntity(HttpEntity httpEntity) throws IOException {
-        BufferedReader rd = new BufferedReader(new InputStreamReader(httpEntity.getContent()));
-        StringBuilder result = new StringBuilder();
-        String line;
-        while ((line = rd.readLine()) != null) {
-            result.append(line);
-        }
-        return result.toString();
-    }
-
-}
diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/RequestClientTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/RequestClientTest.java
deleted file mode 100644 (file)
index 86b12ae..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (c) 2019 Samsung. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-package org.onap.so.apihandler.common;
-
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class RequestClientTest {
-
-    private static final String ENCRYPTION_KEY = "aa3871669d893c7fb8abbcda31b88b4f";
-
-    private RequestClient requestClient;
-
-    @Before
-    public void init() {
-        requestClient = Mockito.mock(RequestClient.class, Mockito.CALLS_REAL_METHODS);
-    }
-
-    @Test
-    public void getEncryptedPropValueWithSuccess() {
-
-        String encryptedValue = requestClient.getEncryptedPropValue(
-                "E8E19DD16CC90D2E458E8FF9A884CC0452F8F3EB8E321F96038DE38D5C1B0B02DFAE00B88E2CF6E2A4101AB2C011FC161212EE",
-                "defaultValue", ENCRYPTION_KEY);
-
-        Assert.assertEquals("apihBpmn:camunda-R1512!", encryptedValue);
-    }
-
-    @Test
-    public void getDefaultEncryptedPropValue() {
-
-        String encryptedValue =
-                requestClient.getEncryptedPropValue("012345678901234567890123456789", "defaultValue", ENCRYPTION_KEY);
-
-        Assert.assertEquals("defaultValue", encryptedValue);
-    }
-
-}
index 2095a91..e6f7a36 100644 (file)
 package org.onap.so.apihandler.common;
 
 
-import static org.hamcrest.Matchers.hasProperty;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.startsWith;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.ProtocolVersion;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.message.BasicHttpResponse;
-import org.apache.http.message.BasicStatusLine;
+import java.io.IOException;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-import org.onap.so.apihandlerinfra.exceptions.ApiException;
-import org.onap.so.apihandlerinfra.exceptions.ValidateException;
-
-/**
- * This class implements test methods of CamundaResoponseHandler.
- * 
- *
- */
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException;
+import org.springframework.http.ResponseEntity;
+
+@RunWith(MockitoJUnitRunner.class)
 public class ResponseHandlerTest {
 
+    @Spy
+    @InjectMocks
+    private ResponseHandler responseHandler;
+
     @Rule
     public ExpectedException thrown = ExpectedException.none();
 
     @Test
-    public void tesParseCamundaResponse() throws ApiException {
-        // String body
-        // ="{\"links\":[{\"method\":\"GET\",\"href\":\"http://localhost:9080/engine-rest/process-instance/2047c658-37ae-11e5-9505-7a1020524153\",\"rel\":\"self\"}],\"id\":\"2047c658-37ae-11e5-9505-7a1020524153\",\"definitionId\":\"dummy:10:73298961-37ad-11e5-9505-7a1020524153\",\"businessKey\":null,\"caseInstanceId\":null,\"ended\":true,\"suspended\":false}";
-
-        String body = "{ \"response\": \"<xml>xml</xml>\"," + "\"messageCode\": 200,"
-                + "\"message\": \"Successfully started the process\"}";
-
-        HttpResponse response = createResponse(200, body, "application/json");
-
-        ResponseHandler respHandler = new ResponseHandler(response, 1);
-
-        int status = respHandler.getStatus();
-        assertEquals(status, HttpStatus.SC_ACCEPTED);
-        assertEquals(respHandler.getResponse().getMessage(), "Successfully started the process");
-
-    }
-
-    @Test
-    public void tesParseCamundaResponseForCamundaTaskType() throws ApiException {
-        String body = "{ \"response\": \"<xml>xml</xml>\"," + "\"messageCode\": 200,"
-                + "\"message\": \"Successfully started the process\"}";
-
-        HttpResponse response = createResponse(200, body, "application/json");
-
-        ResponseHandler respHandler = new ResponseHandler(response, 2);
-
-        int status = respHandler.getStatus();
-        assertEquals(status, HttpStatus.SC_ACCEPTED);
-        assertEquals(respHandler.getResponseBody(), body);
-
-    }
-
-    @Test
-    public void tesParseBpelResponse() throws ApiException {
-        String body = "<test:service-response xmlns:test=\"http://org.onap/so/test\">"
-                + "<test:request-id>req5</test:request-id>" + "<test:request-action>test</test:request-action>"
-                + "<test:source>test</test:source>" + "<test:ack-final-indicator>n</test:ack-final-indicator>"
-                + "</test:service-response>";
-
-        HttpResponse response = createResponse(200, body, "text/xml");
-
-        ResponseHandler respHandler = new ResponseHandler(response, 0);
-
-        int status = respHandler.getStatus();
-        assertEquals(status, HttpStatus.SC_ACCEPTED);
-        assertTrue(respHandler.getResponseBody() != null);
-    }
-
-    @Test
-    public void tesMappingErrorResponse() throws ApiException {
-        thrown.expect(ValidateException.class);
-        thrown.expectMessage(startsWith("Cannot parse Camunda Response"));
-        thrown.expect(hasProperty("httpResponseCode", is(HttpStatus.SC_BAD_REQUEST)));
-        thrown.expect(hasProperty("messageID", is(ErrorNumbers.SVC_BAD_PARAMETER)));
-
-        HttpResponse response = createResponse(HttpStatus.SC_NOT_FOUND, "<html>error</html>", "text/html");
-        ResponseHandler respHandler = new ResponseHandler(response, 1);
-
-        int status = respHandler.getStatus();
-
-        assertEquals(HttpStatus.SC_NOT_IMPLEMENTED, status);
-
+    public void acceptedResponseTest() throws IOException, BPMNFailureException {
+        ResponseEntity<String> camundaResponse = ResponseEntity.noContent().build();
+        thrown.expect(BPMNFailureException.class);
+        thrown.expectMessage("Request Failed due to BPEL error with HTTP Status = 204");
+        responseHandler.acceptedResponse(camundaResponse);
     }
 
     @Test
-    public void tesGenricErrorResponse() throws ApiException {
-
-        String body = "{ \"response\": \"<xml>xml</xml>\"," + "\"messageCode\": 500,"
-                + "\"message\": \"Something went wrong\"}";
-
-        HttpResponse response = createResponse(500, body, "application/json");
-        ResponseHandler respHandler = new ResponseHandler(response, 1);
-        int status = respHandler.getStatus();
-        assertEquals(status, HttpStatus.SC_BAD_GATEWAY);
-        assertEquals(respHandler.getResponse().getMessage(), "Something went wrong");
-    }
+    public void acceptedOrNoContentResponseTest() throws IOException, BPMNFailureException {
+        ResponseEntity<String> camundaResponse = ResponseEntity.badRequest().build();
+        thrown.expect(BPMNFailureException.class);
+        thrown.expectMessage("Request Failed due to BPEL error with HTTP Status = 400");
+        responseHandler.acceptedOrNoContentResponse(camundaResponse);
 
-    private HttpResponse createResponse(int respStatus, String respBody, String contentType) {
-        HttpResponse response =
-                new BasicHttpResponse(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), respStatus, ""));
-        response.setStatusCode(respStatus);
-        try {
-            response.setEntity(new StringEntity(respBody));
-            response.setHeader("Content-Type", contentType);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return response;
     }
 
 }
diff --git a/mso-api-handlers/mso-api-handler-common/src/test/resources/CamundaClientTest/CamundaFailure.json b/mso-api-handlers/mso-api-handler-common/src/test/resources/CamundaClientTest/CamundaFailure.json
new file mode 100644 (file)
index 0000000..2d9e3dd
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "response":"<aetgt:WorkflowException xmlns:aetgt=\"http://org.onap/so/workflow/schema/v1\"><aetgt:ErrorMessage>Exception in create execution list 500 </aetgt:ErrorMessage><aetgt:ErrorCode>7000</aetgt:ErrorCode></aetgt:WorkflowException>",
+       "message":"Fail",
+       "processInstanceID":"4b33ca85-5860-11e8-ae53-0a580ae94342",
+       "variables":null,
+       "messageCode":500
+}
\ No newline at end of file
index d4bc4fd..fae55ff 100644 (file)
@@ -40,13 +40,12 @@ import org.onap.so.client.aai.AAIObjectType;
 import org.onap.so.client.aai.AAIResourcesClient;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
-import org.onap.so.logger.LoggingAnchor;
-import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.json.JSONObject;
+import org.onap.logging.filter.base.ErrorCode;
+import org.onap.so.apihandler.camundabeans.CamundaResponse;
+import org.onap.so.apihandler.common.CamundaClient;
 import org.onap.so.apihandler.common.ErrorNumbers;
-import org.onap.so.apihandler.common.RequestClient;
-import org.onap.so.apihandler.common.RequestClientFactory;
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandler.common.ResponseBuilder;
 import org.onap.so.apihandler.common.ResponseHandler;
@@ -56,6 +55,7 @@ import org.onap.so.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceReq
 import org.onap.so.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceScaleRequest;
 import org.onap.so.apihandlerinfra.e2eserviceinstancebeans.GetE2EServiceInstanceResponse;
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
+import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
 import org.onap.so.constants.Status;
@@ -64,7 +64,7 @@ import org.onap.so.db.catalog.beans.ServiceRecipe;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.OperationStatus;
 import org.onap.so.db.request.client.RequestsDbClient;
-import org.onap.logging.filter.base.ErrorCode;
+import org.onap.so.logger.LoggingAnchor;
 import org.onap.so.logger.MessageEnum;
 import org.onap.so.serviceinstancebeans.ModelInfo;
 import org.onap.so.serviceinstancebeans.ModelType;
@@ -76,6 +76,7 @@ import org.onap.so.serviceinstancebeans.SubscriberInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
@@ -105,9 +106,6 @@ public class E2EServiceInstances {
     @Autowired
     private MsoRequest msoRequest;
 
-    @Autowired
-    private RequestClientFactory requestClientFactory;
-
     @Autowired
     private RequestsDbClient requestsDbClient;
 
@@ -117,6 +115,12 @@ public class E2EServiceInstances {
     @Autowired
     private ResponseBuilder builder;
 
+    @Autowired
+    private CamundaClient camundaClient;
+
+    @Autowired
+    private ResponseHandler responseHandler;
+
     /**
      * POST Requests for E2E Service create Instance on a version provided
      * 
@@ -288,24 +292,16 @@ public class E2EServiceInstances {
         String workflowUrl = "/mso/async/services/CompareModelofE2EServiceInstance";
         int recipeTimeout = 180;
 
-        RequestClient requestClient;
-        HttpResponse response;
-
+        String bpmnRequest = null;
+        RequestClientParameter postParam = null;
         try {
-            requestClient = requestClientFactory.getRequestClient(workflowUrl);
-
             JSONObject jjo = new JSONObject(requestJSON);
-            String bpmnRequest = jjo.toString();
-
-            // Capture audit event
-            logger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
+            bpmnRequest = jjo.toString();
             String serviceId = instanceIdMap.get(SERVICE_ID);
             String serviceType = e2eCompareModelReq.getServiceType();
-            RequestClientParameter postParam = new RequestClientParameter.Builder().setRequestId(requestId)
-                    .setBaseVfModule(false).setRecipeTimeout(recipeTimeout).setRequestAction(action.name())
-                    .setServiceInstanceId(serviceId).setServiceType(serviceType).setRequestDetails(bpmnRequest)
-                    .setALaCarte(false).build();
-            response = requestClient.post(postParam);
+            postParam = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
+                    .setRecipeTimeout(recipeTimeout).setRequestAction(action.name()).setServiceInstanceId(serviceId)
+                    .setServiceType(serviceType).setRequestDetails(bpmnRequest).setALaCarte(false).build();
         } catch (Exception e) {
             Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
                     MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
@@ -315,21 +311,7 @@ public class E2EServiceInstances {
             logger.debug(END_OF_THE_TRANSACTION + resp.getEntity().toString());
             return resp;
         }
-
-        if (response == null) {
-            Response resp =
-                    msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
-                            "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
-            logger.error(LoggingAnchor.FOUR, MessageEnum.APIH_BPEL_COMMUNICATE_ERROR.toString(),
-                    MSO_PROP_APIHANDLER_INFRA, ErrorCode.BusinessProcessError.getValue(), "Null response from BPEL");
-            logger.debug(END_OF_THE_TRANSACTION + resp.getEntity().toString());
-            return resp;
-        }
-
-        ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
-        int bpelStatus = respHandler.getStatus();
-
-        return beplStatusUpdate(requestClient, respHandler, bpelStatus, version);
+        return postRequest(workflowUrl, postParam, version);
     }
 
     private Response getE2EServiceInstance(String serviceId, String operationId, String version) {
@@ -431,29 +413,21 @@ public class E2EServiceInstances {
             return response;
         }
 
-        RequestClient requestClient;
-        HttpResponse response;
+        String bpmnRequest = null;
+        RequestClientParameter postParam = null;
 
         try {
-            requestClient = requestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI());
-
             JSONObject jjo = new JSONObject(requestJSON);
             jjo.put("operationId", requestId);
-
-            String bpmnRequest = jjo.toString();
-
-            // Capture audit event
-            logger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
+            bpmnRequest = jjo.toString();
             String serviceId = instanceIdMap.get(SERVICE_ID);
             String operationType = instanceIdMap.get("operationType");
             String serviceInstanceType = e2eActReq.getServiceType();
-            RequestClientParameter clientParam = new RequestClientParameter.Builder().setRequestId(requestId)
-                    .setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
-                    .setRequestAction(action.name()).setServiceInstanceId(serviceId).setOperationType(operationType)
-                    .setServiceType(serviceInstanceType).setRequestDetails(bpmnRequest).setApiVersion(version)
-                    .setALaCarte(false).setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
-            response = requestClient.post(clientParam);
-
+            postParam = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
+                    .setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name())
+                    .setServiceInstanceId(serviceId).setOperationType(operationType).setServiceType(serviceInstanceType)
+                    .setRequestDetails(bpmnRequest).setApiVersion(version).setALaCarte(false)
+                    .setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
         } catch (Exception e) {
             Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
                     MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
@@ -464,21 +438,7 @@ public class E2EServiceInstances {
             logger.debug("End of the transaction, the final response is: " + resp.getEntity());
             return resp;
         }
-
-        if (response == null) {
-            Response resp =
-                    msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
-                            "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
-            logger.error(LoggingAnchor.FOUR, MessageEnum.APIH_BPEL_COMMUNICATE_ERROR.toString(),
-                    MSO_PROP_APIHANDLER_INFRA, ErrorCode.BusinessProcessError.getValue(), "Null response from BPEL");
-            logger.debug(END_OF_THE_TRANSACTION + resp.getEntity());
-            return resp;
-        }
-
-        ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
-        int bpelStatus = respHandler.getStatus();
-
-        return beplStatusUpdate(requestClient, respHandler, bpelStatus, version);
+        return postRequest(recipeLookupResult.getOrchestrationURI(), postParam, version);
     }
 
     private Response deleteE2EserviceInstances(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
@@ -540,29 +500,19 @@ public class E2EServiceInstances {
             logger.debug(END_OF_THE_TRANSACTION + response.getEntity());
             return response;
         }
-
-        RequestClient requestClient;
-        HttpResponse response;
-
+        String bpmnRequest = null;
+        RequestClientParameter clientParam = null;
         try {
-            requestClient = requestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI());
-
             JSONObject jjo = new JSONObject(requestJSON);
             jjo.put("operationId", requestId);
-
-            String bpmnRequest = jjo.toString();
-
-            // Capture audit event
-            logger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
+            bpmnRequest = jjo.toString();
             String serviceId = instanceIdMap.get(SERVICE_ID);
             String serviceInstanceType = e2eDelReq.getServiceType();
-            RequestClientParameter clientParam = new RequestClientParameter.Builder().setRequestId(requestId)
-                    .setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
-                    .setRequestAction(action.name()).setServiceInstanceId(serviceId).setServiceType(serviceInstanceType)
-                    .setRequestDetails(bpmnRequest).setApiVersion(version).setALaCarte(false)
-                    .setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
-            response = requestClient.post(clientParam);
-
+            clientParam = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
+                    .setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name())
+                    .setServiceInstanceId(serviceId).setServiceType(serviceInstanceType).setRequestDetails(bpmnRequest)
+                    .setApiVersion(version).setALaCarte(false).setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd())
+                    .build();
         } catch (Exception e) {
             Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
                     MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
@@ -574,20 +524,7 @@ public class E2EServiceInstances {
             return resp;
         }
 
-        if (response == null) {
-            Response resp =
-                    msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
-                            "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
-            logger.error(LoggingAnchor.FOUR, MessageEnum.APIH_BPEL_COMMUNICATE_ERROR.toString(),
-                    MSO_PROP_APIHANDLER_INFRA, ErrorCode.BusinessProcessError.getValue(), "Null response from BPEL");
-            logger.debug(END_OF_THE_TRANSACTION + resp.getEntity());
-            return resp;
-        }
-
-        ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
-        int bpelStatus = respHandler.getStatus();
-
-        return beplStatusUpdate(requestClient, respHandler, bpelStatus, version);
+        return postRequest(recipeLookupResult.getOrchestrationURI(), clientParam, version);
     }
 
     private Response updateE2EserviceInstances(String requestJSON, Action action, String version) throws ApiException {
@@ -657,51 +594,14 @@ public class E2EServiceInstances {
         }
 
         String serviceInstanceType = e2eSir.getService().getServiceType();
-
-        RequestClient requestClient;
-        HttpResponse response;
-
         String sirRequestJson = convertToString(sir);
+        RequestClientParameter postParam = new RequestClientParameter.Builder().setRequestId(requestId)
+                .setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
+                .setRequestAction(action.name()).setServiceInstanceId(serviceId).setServiceType(serviceInstanceType)
+                .setRequestDetails(sirRequestJson).setApiVersion(version).setALaCarte(false)
+                .setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
 
-        try {
-            requestClient = requestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI());
-
-            // Capture audit event
-            logger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
-            RequestClientParameter postParam = new RequestClientParameter.Builder().setRequestId(requestId)
-                    .setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
-                    .setRequestAction(action.name()).setServiceInstanceId(serviceId).setServiceType(serviceInstanceType)
-                    .setRequestDetails(sirRequestJson).setApiVersion(version).setALaCarte(false)
-                    .setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
-            response = requestClient.post(postParam);
-        } catch (Exception e) {
-            logger.debug("Exception while communicate with BPMN engine", e);
-            Response getBPMNResp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
-                    MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
-                    ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
-
-            logger.error(LoggingAnchor.FOUR, MessageEnum.APIH_BPEL_COMMUNICATE_ERROR.toString(),
-                    MSO_PROP_APIHANDLER_INFRA, ErrorCode.AvailabilityError.getValue(),
-                    "Exception while communicate with BPMN engine");
-            logger.debug(END_OF_THE_TRANSACTION + getBPMNResp.getEntity());
-
-            return getBPMNResp;
-        }
-
-        if (response == null) {
-            Response getBPMNResp =
-                    msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
-                            "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
-            logger.error(LoggingAnchor.FOUR, MessageEnum.APIH_BPEL_COMMUNICATE_ERROR.toString(),
-                    MSO_PROP_APIHANDLER_INFRA, ErrorCode.BusinessProcessError.getValue(), "Null response from BPEL");
-            logger.debug(END_OF_THE_TRANSACTION + getBPMNResp.getEntity());
-            return getBPMNResp;
-        }
-
-        ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
-        int bpelStatus = respHandler.getStatus();
-
-        return beplStatusUpdate(requestClient, respHandler, bpelStatus, version);
+        return postRequest(recipeLookupResult.getOrchestrationURI(), postParam, version);
     }
 
     private Response processE2EserviceInstances(String requestJSON, Action action,
@@ -771,48 +671,14 @@ public class E2EServiceInstances {
         String serviceInstanceType = e2eSir.getService().getServiceType();
 
         String serviceId = e2eSir.getService().getServiceId();
-        RequestClient requestClient;
-        HttpResponse response;
-
         String sirRequestJson = convertToString(sir);
+        RequestClientParameter parameter = new RequestClientParameter.Builder().setRequestId(requestId)
+                .setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
+                .setRequestAction(action.name()).setServiceInstanceId(serviceId).setServiceType(serviceInstanceType)
+                .setRequestDetails(sirRequestJson).setApiVersion(version).setALaCarte(false)
+                .setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
 
-        try {
-            requestClient = requestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI());
-
-            // Capture audit event
-            logger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
-            RequestClientParameter parameter = new RequestClientParameter.Builder().setRequestId(requestId)
-                    .setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
-                    .setRequestAction(action.name()).setServiceInstanceId(serviceId).setServiceType(serviceInstanceType)
-                    .setRequestDetails(sirRequestJson).setApiVersion(version).setALaCarte(false)
-                    .setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
-            response = requestClient.post(parameter);
-        } catch (Exception e) {
-            Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
-                    MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
-                    ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
-
-            logger.error(LoggingAnchor.FOUR, MessageEnum.APIH_BPEL_COMMUNICATE_ERROR.toString(),
-                    MSO_PROP_APIHANDLER_INFRA, ErrorCode.AvailabilityError.getValue(),
-                    "Exception while communicate with BPMN engine");
-            logger.debug(END_OF_THE_TRANSACTION + resp.getEntity());
-            return resp;
-        }
-
-        if (response == null) {
-            Response resp =
-                    msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
-                            "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
-            logger.error(LoggingAnchor.FOUR, MessageEnum.APIH_BPEL_COMMUNICATE_ERROR.toString(),
-                    MSO_PROP_APIHANDLER_INFRA, ErrorCode.BusinessProcessError.getValue(), "Null response from BPEL");
-            logger.debug(END_OF_THE_TRANSACTION + resp.getEntity());
-            return resp;
-        }
-
-        ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
-        int bpelStatus = respHandler.getStatus();
-
-        return beplStatusUpdate(requestClient, respHandler, bpelStatus, version);
+        return postRequest(recipeLookupResult.getOrchestrationURI(), parameter, version);
     }
 
     private Response scaleE2EserviceInstances(String requestJSON, Action action, String version) throws ApiException {
@@ -865,90 +731,67 @@ public class E2EServiceInstances {
             logger.debug(END_OF_THE_TRANSACTION + response.getEntity());
             return response;
         }
-
-        RequestClient requestClient;
-        HttpResponse response;
-
+        String bpmnRequest = null;
+        RequestClientParameter postParam = null;
         try {
-            requestClient = requestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI());
-
             JSONObject jjo = new JSONObject(requestJSON);
             jjo.put("operationId", requestId);
-
-            String bpmnRequest = jjo.toString();
-
-            // Capture audit event
-            logger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
+            bpmnRequest = jjo.toString();
             String serviceId = instanceIdMap.get(SERVICE_ID);
             String serviceInstanceType = e2eScaleReq.getService().getServiceType();
-            RequestClientParameter postParam = new RequestClientParameter.Builder().setRequestId(requestId)
-                    .setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
-                    .setRequestAction(action.name()).setServiceInstanceId(serviceId).setServiceType(serviceInstanceType)
-                    .setRequestDetails(bpmnRequest).setApiVersion(version).setALaCarte(false)
-                    .setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
-            response = requestClient.post(postParam);
+            postParam = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
+                    .setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name())
+                    .setServiceInstanceId(serviceId).setServiceType(serviceInstanceType).setRequestDetails(bpmnRequest)
+                    .setApiVersion(version).setALaCarte(false).setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd())
+                    .build();
         } catch (Exception e) {
             Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
-                    MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
+                    MsoException.ServiceException, "Failed creating bpmnRequest " + e.getMessage(),
                     ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
 
             logger.error(LoggingAnchor.FOUR, MessageEnum.APIH_BPEL_COMMUNICATE_ERROR.toString(),
                     MSO_PROP_APIHANDLER_INFRA, ErrorCode.AvailabilityError.getValue(),
-                    "Exception while communicate with BPMN engine", e);
+                    "Exception while creating bpmnRequest", e);
             logger.debug(END_OF_THE_TRANSACTION + resp.getEntity());
             return resp;
         }
+        return postRequest(recipeLookupResult.getOrchestrationURI(), postParam, version);
+    }
 
-        if (response == null) {
-            Response resp =
-                    msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
-                            "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
+    protected Response postRequest(String orchestrationURI, RequestClientParameter postParam, String version)
+            throws ApiException {
+        ResponseEntity<String> response = null;
+        try {
+            response = camundaClient.post(postParam, orchestrationURI);
+        } catch (BPMNFailureException e) {
+            Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR,
+                    MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
+                    ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
             logger.error(LoggingAnchor.FOUR, MessageEnum.APIH_BPEL_COMMUNICATE_ERROR.toString(),
-                    MSO_PROP_APIHANDLER_INFRA, ErrorCode.BusinessProcessError.getValue(), "Null response from BPEL");
+                    MSO_PROP_APIHANDLER_INFRA, ErrorCode.AvailabilityError.getValue(),
+                    "Exception while communicate with BPMN engine");
+            logger.debug(END_OF_THE_TRANSACTION + resp.getEntity());
+            return resp;
+        } catch (Exception e) {
+            Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
+                    MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
+                    ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
+            logger.error(LoggingAnchor.FOUR, MessageEnum.APIH_BPEL_COMMUNICATE_ERROR.toString(),
+                    MSO_PROP_APIHANDLER_INFRA, ErrorCode.AvailabilityError.getValue(),
+                    "Exception while communicate with BPMN engine");
             logger.debug(END_OF_THE_TRANSACTION + resp.getEntity());
             return resp;
         }
-
-        ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
-        int bpelStatus = respHandler.getStatus();
-
-        return beplStatusUpdate(requestClient, respHandler, bpelStatus, version);
+        return bpelStatusUpdate(response, version);
     }
 
-    private Response beplStatusUpdate(RequestClient requestClient, ResponseHandler respHandler, int bpelStatus,
-            String version) {
-
+    private Response bpelStatusUpdate(ResponseEntity<String> responseEntity, String version) throws ApiException {
         String apiVersion = version.substring(1);
-
-        // BPMN accepted the request, the request is in progress
-        if (bpelStatus == HttpStatus.SC_ACCEPTED) {
-            String camundaJSONResponseBody = respHandler.getResponseBody();
-            logger.debug("Received from Camunda: " + camundaJSONResponseBody);
-            logger.debug(END_OF_THE_TRANSACTION + camundaJSONResponseBody);
-            return builder.buildResponse(HttpStatus.SC_ACCEPTED, null, camundaJSONResponseBody, apiVersion);
-        } else {
-            List<String> variables = new ArrayList<>();
-            variables.add(bpelStatus + "");
-            String camundaJSONResponseBody = respHandler.getResponseBody();
-            if (camundaJSONResponseBody != null && !camundaJSONResponseBody.isEmpty()) {
-                Response resp = msoRequest.buildServiceErrorResponse(bpelStatus, MsoException.ServiceException,
-                        "Request Failed due to BPEL error with HTTP Status= %1 " + '\n' + camundaJSONResponseBody,
-                        ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, variables, version);
-                logger.error(LoggingAnchor.FOUR, MessageEnum.APIH_BPEL_RESPONSE_ERROR.toString(),
-                        requestClient.getUrl(), ErrorCode.BusinessProcessError.getValue(),
-                        "Response from BPEL engine is failed with HTTP Status=" + bpelStatus);
-                logger.debug(END_OF_THE_TRANSACTION + resp.getEntity());
-                return resp;
-            } else {
-                Response resp = msoRequest.buildServiceErrorResponse(bpelStatus, MsoException.ServiceException,
-                        "Request Failed due to BPEL error with HTTP Status= %1",
-                        ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, variables, version);
-                logger.error("", MessageEnum.APIH_BPEL_RESPONSE_ERROR.toString(), requestClient.getUrl(),
-                        ErrorCode.BusinessProcessError.getValue(), "Response from BPEL engine is empty");
-                logger.debug(END_OF_THE_TRANSACTION + resp.getEntity());
-                return resp;
-            }
-        }
+        responseHandler.acceptedResponse(responseEntity);
+        CamundaResponse camundaResponse = responseHandler.getCamundaResponse(responseEntity);
+        String response = camundaResponse.getResponse();
+        logger.debug(END_OF_THE_TRANSACTION + response);
+        return builder.buildResponse(HttpStatus.SC_ACCEPTED, null, response, apiVersion);
     }
 
     /**
index 0ec6178..b9995bb 100644 (file)
@@ -34,11 +34,10 @@ import javax.ws.rs.container.ContainerRequestContext;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
+import org.onap.logging.filter.base.ErrorCode;
+import org.onap.so.apihandler.common.CamundaClient;
 import org.onap.so.apihandler.common.ErrorNumbers;
-import org.onap.so.apihandler.common.RequestClient;
-import org.onap.so.apihandler.common.RequestClientFactory;
 import org.onap.so.apihandler.common.ResponseBuilder;
 import org.onap.so.apihandler.common.ResponseHandler;
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
@@ -50,12 +49,12 @@ import org.onap.so.apihandlerinfra.tasksbeans.TasksRequest;
 import org.onap.so.apihandlerinfra.tasksbeans.Value;
 import org.onap.so.apihandlerinfra.tasksbeans.Variables;
 import org.onap.so.exceptions.ValidationException;
-import org.onap.logging.filter.base.ErrorCode;
 import org.onap.so.logger.LoggingAnchor;
 import org.onap.so.logger.MessageEnum;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -76,13 +75,13 @@ public class ManualTasks {
     private String taskUri;
 
     @Autowired
-    private RequestClientFactory reqClientFactory;
+    private ResponseBuilder builder;
 
     @Autowired
-    private MsoRequest msoRequest;
+    private CamundaClient camundaClient;
 
     @Autowired
-    private ResponseBuilder builder;
+    private ResponseHandler responseHandler;
 
     @POST
     @Path("/{version:[vV]1}/{taskId}/complete")
@@ -161,100 +160,37 @@ public class ManualTasks {
             mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
             camundaJsonReq = mapper.writeValueAsString(variablesForComplete);
         } catch (JsonProcessingException e) {
-
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_GENERAL_EXCEPTION, ErrorCode.UnknownError)
-                            .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-
-
+            logger.error("Mapping of JSON object to Camunda request failed");
             ValidateException validateException =
                     new ValidateException.Builder("Mapping of JSON object to Camunda request failed",
-                            HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR)
-                                    .errorInfo(errorLoggerInfo).build();
+                            HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).build();
             throw validateException;
         }
 
-        RequestClient requestClient;
-        HttpResponse response;
         String requestUrl = taskUri + "/" + taskId + "/complete";
-        try {
-            requestClient = reqClientFactory.getRequestClient(requestUrl);
-            // Capture audit event
-
-            response = requestClient.post(camundaJsonReq);
-
-        } catch (Exception e) {
-
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, ErrorCode.AvailabilityError)
-                            .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-
-
-
-            BPMNFailureException bpmnFailureException =
-                    new BPMNFailureException.Builder(String.valueOf(HttpStatus.SC_BAD_GATEWAY),
-                            HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).errorInfo(errorLoggerInfo)
-                                    .build();
-
-            throw bpmnFailureException;
-        }
-
-        if (response == null) {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, ErrorCode.BusinessProcessError)
-                            .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
+        ResponseEntity<String> response = camundaClient.post(camundaJsonReq, requestUrl);
 
+        int bpelStatus = responseHandler.setStatus(response.getStatusCodeValue());
 
-            BPMNFailureException bpmnFailureException =
-                    new BPMNFailureException.Builder(String.valueOf(HttpStatus.SC_BAD_GATEWAY),
-                            HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).errorInfo(errorLoggerInfo)
-                                    .build();
-
-            throw bpmnFailureException;
-
-        }
-
-        ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
-        int bpelStatus = respHandler.getStatus();
-
-        // BPEL accepted the request, the request is in progress
-        if (bpelStatus == HttpStatus.SC_NO_CONTENT || bpelStatus == HttpStatus.SC_ACCEPTED) {
-            logger.debug("Received good response from Camunda");
-            TaskRequestReference trr = new TaskRequestReference();
-            trr.setTaskId(taskId);
-            String completeResp = null;
-            try {
-                ObjectMapper mapper = new ObjectMapper();
-                mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
-                completeResp = mapper.writeValueAsString(trr);
-            } catch (JsonProcessingException e) {
-
-                ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR,
-                        ErrorCode.BusinessProcessError).build();
-
-
-                ValidateException validateException =
-                        new ValidateException.Builder("Request Failed due to bad response format", bpelStatus,
-                                ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
-
-                throw validateException;
-            }
-            logger.debug("Response to the caller: {}", completeResp);
-            logger.debug("End of the transaction, the final response is: {}", completeResp);
-            return builder.buildResponse(HttpStatus.SC_ACCEPTED, requestId, completeResp, apiVersion);
-        } else {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.BusinessProcessError)
-                            .build();
-
-
-            BPMNFailureException bpmnFailureException = new BPMNFailureException.Builder(String.valueOf(bpelStatus),
-                    bpelStatus, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
-
-            throw bpmnFailureException;
-
+        responseHandler.acceptedOrNoContentResponse(response);
+        logger.debug("Received good response from Camunda");
+        TaskRequestReference trr = new TaskRequestReference();
+        trr.setTaskId(taskId);
+        String completeResp = null;
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
+            completeResp = mapper.writeValueAsString(trr);
+        } catch (JsonProcessingException e) {
+            logger.error("Unable to map response from Camunda");
+            ValidateException validateException =
+                    new ValidateException.Builder("Request Failed due to bad response format", bpelStatus,
+                            ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).build();
+            throw validateException;
         }
-
+        logger.debug("Response to the caller: {}", completeResp);
+        logger.debug("End of the transaction, the final response is: {}", completeResp);
+        return builder.buildResponse(HttpStatus.SC_ACCEPTED, requestId, completeResp, apiVersion);
     }
 
     private static boolean empty(String s) {
index a1e8781..a61975f 100644 (file)
@@ -38,21 +38,19 @@ import javax.ws.rs.container.ContainerRequestContext;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang.StringUtils;
-import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.camunda.bpm.engine.impl.persistence.entity.HistoricProcessInstanceEntity;
+import org.onap.logging.filter.base.ErrorCode;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
 import org.onap.so.apihandler.camundabeans.CamundaResponse;
+import org.onap.so.apihandler.common.CamundaClient;
 import org.onap.so.apihandler.common.CommonConstants;
 import org.onap.so.apihandler.common.ErrorNumbers;
-import org.onap.so.apihandler.common.RequestClient;
-import org.onap.so.apihandler.common.RequestClientFactory;
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandler.common.ResponseBuilder;
 import org.onap.so.apihandler.common.ResponseHandler;
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
 import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException;
-import org.onap.so.apihandlerinfra.exceptions.ClientConnectionException;
 import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException;
 import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestException;
 import org.onap.so.apihandlerinfra.exceptions.RecipeNotFoundException;
@@ -74,7 +72,6 @@ import org.onap.so.db.catalog.beans.VnfResourceCustomization;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.exceptions.ValidationException;
-import org.onap.logging.filter.base.ErrorCode;
 import org.onap.so.logger.LogConstants;
 import org.onap.so.logger.MessageEnum;
 import org.onap.so.serviceinstancebeans.CloudConfiguration;
@@ -114,9 +111,6 @@ public class RequestHandlerUtils extends AbstractRestHandler {
     @Autowired
     private Environment env;
 
-    @Autowired
-    private RequestClientFactory reqClientFactory;
-
     @Autowired
     private ResponseBuilder builder;
 
@@ -129,122 +123,62 @@ public class RequestHandlerUtils extends AbstractRestHandler {
     @Autowired
     private CatalogDbClient catalogDbClient;
 
-    public Response postBPELRequest(InfraActiveRequests currentActiveReq, RequestClientParameter requestClientParameter,
-            String orchestrationUri, String requestScope) throws ApiException {
-        HttpResponse response = null;
-        RequestClient requestClient = null;
-
-        try {
-            requestClient = reqClientFactory.getRequestClient(orchestrationUri);
-            response = requestClient.post(requestClientParameter);
-        } catch (Exception e) {
-            logger.error("Error posting request to BPMN", e);
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, ErrorCode.AvailabilityError)
-                            .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-            String url = requestClient != null ? requestClient.getUrl() : "";
-            ClientConnectionException clientException =
-                    new ClientConnectionException.Builder(url, HttpStatus.SC_BAD_GATEWAY,
-                            ErrorNumbers.SVC_NO_SERVER_RESOURCES).cause(e).errorInfo(errorLoggerInfo).build();
-            updateStatus(currentActiveReq, Status.FAILED, clientException.getMessage());
-            throw clientException;
-        }
-
-        if (response == null) {
+    @Autowired
+    private CamundaClient camundaClient;
 
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, ErrorCode.BusinessProcessError)
-                            .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-            ClientConnectionException clientException = new ClientConnectionException.Builder(requestClient.getUrl(),
-                    HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).errorInfo(errorLoggerInfo).build();
-            updateStatus(currentActiveReq, Status.FAILED, clientException.getMessage());
-            throw clientException;
-        }
+    @Autowired
+    private ResponseHandler responseHandler;
 
-        ResponseHandler respHandler = null;
-        int bpelStatus = 500;
+    protected ResponseEntity<String> postRequest(InfraActiveRequests currentActiveReq,
+            RequestClientParameter requestClientParameter, String orchestrationUri) throws ApiException {
         try {
-            respHandler = new ResponseHandler(response, requestClient.getType());
-            bpelStatus = respHandler.getStatus();
+            return camundaClient.post(requestClientParameter, orchestrationUri);
         } catch (ApiException e) {
-            logger.error("Exception occurred", e);
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
-                            .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-            ValidateException validateException =
-                    new ValidateException.Builder("Exception caught mapping Camunda JSON response to object",
-                            HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
-                                    .errorInfo(errorLoggerInfo).build();
-            updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
-            throw validateException;
+            updateStatus(currentActiveReq, Status.FAILED, e.getMessage());
+            throw e;
         }
+    }
 
-        // BPEL accepted the request, the request is in progress
-        if (bpelStatus == HttpStatus.SC_ACCEPTED) {
-            ServiceInstancesResponse jsonResponse;
-            CamundaResponse camundaResp = respHandler.getResponse();
-
-            if ("Success".equalsIgnoreCase(camundaResp.getMessage())) {
-                try {
-                    ObjectMapper mapper = new ObjectMapper();
-                    jsonResponse = mapper.readValue(camundaResp.getResponse(), ServiceInstancesResponse.class);
-                    jsonResponse.getRequestReferences().setRequestId(requestClientParameter.getRequestId());
-                    Optional<URL> selfLinkUrl =
-                            buildSelfLinkUrl(currentActiveReq.getRequestUrl(), requestClientParameter.getRequestId());
-                    if (selfLinkUrl.isPresent()) {
-                        jsonResponse.getRequestReferences().setRequestSelfLink(selfLinkUrl.get());
-                    } else {
-                        jsonResponse.getRequestReferences().setRequestSelfLink(null);
-                    }
-                } catch (IOException e) {
-                    logger.error("Exception occurred", e);
-                    ErrorLoggerInfo errorLoggerInfo =
-                            new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
-                                    .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-                    ValidateException validateException =
-                            new ValidateException.Builder("Exception caught mapping Camunda JSON response to object",
-                                    HttpStatus.SC_NOT_ACCEPTABLE, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
-                                            .errorInfo(errorLoggerInfo).build();
-                    updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
-                    throw validateException;
+    public Response postBPELRequest(InfraActiveRequests currentActiveReq, RequestClientParameter requestClientParameter,
+            String orchestrationUri, String requestScope) throws ApiException {
+        ObjectMapper mapper = new ObjectMapper();
+        ResponseEntity<String> response = postRequest(currentActiveReq, requestClientParameter, orchestrationUri);
+        ServiceInstancesResponse jsonResponse = null;
+        int bpelStatus = responseHandler.setStatus(response.getStatusCodeValue());
+        try {
+            responseHandler.acceptedResponse(response);
+            CamundaResponse camundaResponse = responseHandler.getCamundaResponse(response);
+            String responseBody = camundaResponse.getResponse();
+            if ("Success".equalsIgnoreCase(camundaResponse.getMessage())) {
+                jsonResponse = mapper.readValue(responseBody, ServiceInstancesResponse.class);
+                jsonResponse.getRequestReferences().setRequestId(requestClientParameter.getRequestId());
+                Optional<URL> selfLinkUrl =
+                        buildSelfLinkUrl(currentActiveReq.getRequestUrl(), requestClientParameter.getRequestId());
+                if (selfLinkUrl.isPresent()) {
+                    jsonResponse.getRequestReferences().setRequestSelfLink(selfLinkUrl.get());
+                } else {
+                    jsonResponse.getRequestReferences().setRequestSelfLink(null);
                 }
-                return builder.buildResponse(HttpStatus.SC_ACCEPTED, requestClientParameter.getRequestId(),
-                        jsonResponse, requestClientParameter.getApiVersion());
+            } else {
+                BPMNFailureException bpmnException =
+                        new BPMNFailureException.Builder(String.valueOf(bpelStatus) + responseBody, bpelStatus,
+                                ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).build();
+                updateStatus(currentActiveReq, Status.FAILED, bpmnException.getMessage());
+                throw bpmnException;
             }
+        } catch (ApiException e) {
+            updateStatus(currentActiveReq, Status.FAILED, e.getMessage());
+            throw e;
+        } catch (IOException e) {
+            logger.error("Exception caught mapping Camunda JSON response to object: ", e);
+            updateStatus(currentActiveReq, Status.FAILED, e.getMessage());
+            throw new ValidateException.Builder("Exception caught mapping Camunda JSON response to object",
+                    HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).cause(e).build();
         }
-
-        List<String> variables = new ArrayList<>();
-        variables.add(bpelStatus + "");
-        String camundaJSONResponseBody = respHandler.getResponseBody();
-        if (camundaJSONResponseBody != null && !camundaJSONResponseBody.isEmpty()) {
-
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.BusinessProcessError)
-                            .errorSource(requestClient.getUrl()).build();
-            BPMNFailureException bpmnException =
-                    new BPMNFailureException.Builder(String.valueOf(bpelStatus) + camundaJSONResponseBody, bpelStatus,
-                            ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
-
-            updateStatus(currentActiveReq, Status.FAILED, bpmnException.getMessage());
-
-            throw bpmnException;
-        } else {
-
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.BusinessProcessError)
-                            .errorSource(requestClient.getUrl()).build();
-
-
-            BPMNFailureException servException = new BPMNFailureException.Builder(String.valueOf(bpelStatus),
-                    bpelStatus, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
-            updateStatus(currentActiveReq, Status.FAILED, servException.getMessage());
-
-            throw servException;
-        }
+        return builder.buildResponse(HttpStatus.SC_ACCEPTED, requestClientParameter.getRequestId(), jsonResponse,
+                requestClientParameter.getApiVersion());
     }
 
-
-
     @Override
     public void updateStatus(InfraActiveRequests aq, Status status, String errorMessage)
             throws RequestDbFailureException {
index 418c702..dadb7c7 100644 (file)
@@ -22,7 +22,6 @@
 
 package org.onap.so.apihandlerinfra;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -33,13 +32,12 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriBuilder;
-import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.json.JSONArray;
 import org.json.JSONObject;
+import org.onap.logging.filter.base.ErrorCode;
+import org.onap.so.apihandler.common.CamundaClient;
 import org.onap.so.apihandler.common.ErrorNumbers;
-import org.onap.so.apihandler.common.RequestClient;
-import org.onap.so.apihandler.common.RequestClientFactory;
 import org.onap.so.apihandler.common.ResponseBuilder;
 import org.onap.so.apihandler.common.ResponseHandler;
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
@@ -50,12 +48,12 @@ import org.onap.so.apihandlerinfra.tasksbeans.TaskList;
 import org.onap.so.apihandlerinfra.tasksbeans.TaskVariableValue;
 import org.onap.so.apihandlerinfra.tasksbeans.TaskVariables;
 import org.onap.so.apihandlerinfra.tasksbeans.TasksGetResponse;
-import org.onap.logging.filter.base.ErrorCode;
 import org.onap.so.logger.MessageEnum;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -79,10 +77,13 @@ public class TasksHandler {
     private String requestUrl;
 
     @Autowired
-    private RequestClientFactory reqClientFactory;
+    private ResponseBuilder builder;
 
     @Autowired
-    private ResponseBuilder builder;
+    private CamundaClient camundaClient;
+
+    @Autowired
+    private ResponseHandler responseHandler;
 
     @Path("/{version:[vV]1}")
     @GET
@@ -148,18 +149,12 @@ public class TasksHandler {
         }
 
         tv.setTaskVariables(tvvList);
-
-        RequestClient requestClient = null;
-
-        HttpResponse response = null;
+        ResponseEntity<String> response = null;
+        String camundaJsonReq = null;
 
         try {
-            requestClient = reqClientFactory.getRequestClient(requestUrl);
-            // Capture audit event
             ObjectMapper mapper = new ObjectMapper();
-            String camundaJsonReq = mapper.writeValueAsString(tv);
-            response = requestClient.post(camundaJsonReq);
-
+            camundaJsonReq = mapper.writeValueAsString(tv);
         } catch (JsonProcessingException e) {
             ErrorLoggerInfo errorLoggerInfo =
                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, ErrorCode.SchemaError)
@@ -167,21 +162,16 @@ public class TasksHandler {
             throw new ValidateException.Builder("Mapping of request to JSON object failed : " + e.getMessage(),
                     HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo)
                             .build();
-
-        } catch (IOException e) {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, ErrorCode.AvailabilityError)
-                            .build();
-            throw new BPMNFailureException.Builder(String.valueOf(HttpStatus.SC_BAD_GATEWAY), HttpStatus.SC_BAD_GATEWAY,
-                    ErrorNumbers.SVC_NO_SERVER_RESOURCES).cause(e).errorInfo(errorLoggerInfo).build();
         }
+
+        response = camundaClient.post(camundaJsonReq, requestUrl);
         TasksGetResponse trr = new TasksGetResponse();
         List<TaskList> taskList = new ArrayList<>();
 
-        ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
-        int bpelStatus = respHandler.getStatus();
-        String respBody = respHandler.getResponseBody();
-        if ((bpelStatus == HttpStatus.SC_NO_CONTENT || bpelStatus == HttpStatus.SC_ACCEPTED) && (null != respBody)) {
+        int bpelStatus = responseHandler.setStatus(response.getStatusCodeValue());
+        String respBody = response.getBody();
+        responseHandler.acceptedOrNoContentResponse(response);
+        if (null != respBody) {
 
             JSONArray data = new JSONArray(respBody);
 
@@ -230,45 +220,22 @@ public class TasksHandler {
     private TaskList getTaskInfo(String taskId) throws ApiException {
         TaskList taskList;
         String getRequestUrl = UriBuilder.fromUri(requestUrl).path(taskId).path("variables").build().toString();
-        HttpResponse getResponse;
-
-        RequestClient requestClient = reqClientFactory.getRequestClient(getRequestUrl);
-        // Capture audit event
-        try {
-            getResponse = requestClient.get();
-        } catch (IOException e) {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, ErrorCode.AvailabilityError)
-                            .build();
-            throw new BPMNFailureException.Builder(String.valueOf(HttpStatus.SC_BAD_GATEWAY), HttpStatus.SC_BAD_GATEWAY,
-                    ErrorNumbers.SVC_NO_SERVER_RESOURCES).cause(e).errorInfo(errorLoggerInfo).build();
-        }
-        ResponseHandler respHandler = new ResponseHandler(getResponse, requestClient.getType());
-        int bpelStatus = respHandler.getStatus();
-        if (bpelStatus == HttpStatus.SC_ACCEPTED) {
-            String respBody = respHandler.getResponseBody();
-            if (respBody != null) {
-                taskList = buildTaskList(taskId, respBody);
-            } else {
-                ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
-                        ErrorCode.AvailabilityError).build();
-                throw new BPMNFailureException.Builder(String.valueOf(HttpStatus.SC_BAD_GATEWAY),
-                        HttpStatus.SC_BAD_GATEWAY, ErrorNumbers.SVC_NO_SERVER_RESOURCES).errorInfo(errorLoggerInfo)
-                                .build();
+        ResponseEntity<String> getResponse;
 
-            }
+        getResponse = camundaClient.get(getRequestUrl);
 
+        responseHandler.acceptedResponse(getResponse);
+        String respBody = getResponse.getBody();
+        if (respBody != null) {
+            taskList = buildTaskList(taskId, respBody);
         } else {
             ErrorLoggerInfo errorLoggerInfo =
                     new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, ErrorCode.AvailabilityError)
                             .build();
-
-            throw new BPMNFailureException.Builder(String.valueOf(bpelStatus), bpelStatus,
+            throw new BPMNFailureException.Builder(String.valueOf(HttpStatus.SC_BAD_GATEWAY), HttpStatus.SC_BAD_GATEWAY,
                     ErrorNumbers.SVC_NO_SERVER_RESOURCES).errorInfo(errorLoggerInfo).build();
         }
-
         return taskList;
-
     }
 
     private TaskList buildTaskList(String taskId, String respBody) {
index 3fd672b..c806e9f 100644 (file)
 
 package org.onap.so.apihandlerinfra.infra.rest.handler;
 
-import java.io.IOException;
 import java.net.URL;
 import java.sql.Timestamp;
 import java.util.Map;
 import java.util.Optional;
 import javax.ws.rs.container.ContainerRequestContext;
 import org.apache.http.HttpStatus;
+import org.onap.logging.filter.base.ErrorCode;
+import org.onap.so.apihandler.common.CamundaClient;
 import org.onap.so.apihandler.common.ErrorNumbers;
-import org.onap.so.apihandler.common.RequestClient;
-import org.onap.so.apihandler.common.RequestClientFactory;
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.Action;
 import org.onap.so.apihandlerinfra.Actions;
@@ -45,7 +44,6 @@ import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
-import org.onap.logging.filter.base.ErrorCode;
 import org.onap.so.logger.LogConstants;
 import org.onap.so.logger.MessageEnum;
 import org.onap.so.serviceinstancebeans.ModelType;
@@ -74,7 +72,7 @@ public abstract class AbstractRestHandler {
     protected RequestsDbClient infraActiveRequestsClient;
 
     @Autowired
-    protected RequestClientFactory reqClientFactory;
+    private CamundaClient camundaClient;
 
     public String getRequestUri(ContainerRequestContext context) {
         String requestUri = context.getUriInfo().getPath();
@@ -151,10 +149,9 @@ public abstract class AbstractRestHandler {
 
     public void callWorkflowEngine(RequestClientParameter requestClientParameter, String orchestrationUri)
             throws WorkflowEngineConnectionException {
-        RequestClient requestClient = reqClientFactory.getRequestClient(orchestrationUri);
         try {
-            requestClient.post(requestClientParameter);
-        } catch (IOException e) {
+            camundaClient.post(requestClientParameter, orchestrationUri);
+        } catch (ApiException e) {
             logger.error("Error Calling Workflow Engine", e);
             throw new WorkflowEngineConnectionException("Error Calling Workflow Engine", e);
         }
index 979aa8f..86e8472 100644 (file)
@@ -103,7 +103,7 @@ public class E2EServiceInstancesTest extends BaseTest {
         String uri = e2eServInstancesUri + "v3";
         ResponseEntity<String> response = sendRequest(inputStream("/Request.json"), uri, HttpMethod.POST);
 
-        assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
+        assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
     }
 
     @Test
@@ -143,7 +143,7 @@ public class E2EServiceInstancesTest extends BaseTest {
         String uri = e2eServInstancesUri + "v5/9b9f02c0-298b-458a-bc9c-be3692e4f35e";
         ResponseEntity<String> response = sendRequest(inputStream("/DeleteRequest.json"), uri, HttpMethod.DELETE);
 
-        assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
+        assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
     }
 
     @Test
@@ -183,14 +183,14 @@ public class E2EServiceInstancesTest extends BaseTest {
         String uri = e2eServInstancesUri + "v5/9b9f02c0-298b-458a-bc9c-be3692e4f35e/scale";
         ResponseEntity<String> response = sendRequest(inputStream("/ScaleRequest.json"), uri, HttpMethod.POST);
 
-        assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
+        assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
     }
 
     @Test
     public void updateE2EServiceInstance() throws IOException {
         String uri = e2eServInstancesUri + "v3/9b9f02c0-298b-458a-bc9c-be3692e4f35e";
         ResponseEntity<String> response = sendRequest(inputStream("/Request.json"), uri, HttpMethod.PUT);
-        assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
+        assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
     }
 
     @Test
@@ -240,8 +240,8 @@ public class E2EServiceInstancesTest extends BaseTest {
         RequestError expectedResponse = new RequestError();
         ServiceException exception = new ServiceException();
         exception.setMessageId("SVC1000");
-        exception.setText(
-                "Failed calling bpmn localhost:" + env.getProperty("wiremock.server.port") + " failed to respond");
+        exception.setText("Failed calling bpmn Client from http://localhost:" + env.getProperty("wiremock.server.port")
+                + "/mso/async/services/CompareModelofE2EServiceInstance failed to connect or respond");
         expectedResponse.setServiceException(exception);
 
         String uri = e2eServInstancesUri + "v5/9b9f02c0-298b-458a-bc9c-be3692e4f35e/modeldifferences";
index fcf25b2..f4ff19f 100644 (file)
@@ -182,7 +182,8 @@ public class ManualTasksTest extends BaseTest {
         RequestError expectedResponse = new RequestError();
         ServiceException se = new ServiceException();
         se.setMessageId("SVC1000");
-        se.setText("Request Failed due to BPEL error with HTTP Status = 502");
+        se.setText("Client from http://localhost:" + env.getProperty("wiremock.server.port")
+                + "/sobpmnengine/task/55/complete failed to connect or respond");
         expectedResponse.setServiceException(se);
         HttpHeaders headers = new HttpHeaders();
         headers.set("Accept", MediaType.APPLICATION_JSON);
index 1332ffd..143c928 100644 (file)
@@ -2214,7 +2214,6 @@ public class ServiceInstancesTest extends BaseTest {
 
         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
-                        .withBodyFile("Camunda/UnauthorizedResponse.json")
                         .withStatus(org.apache.http.HttpStatus.SC_UNAUTHORIZED)));
 
         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
@@ -2231,7 +2230,7 @@ public class ServiceInstancesTest extends BaseTest {
 
         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
         RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
-        assertEquals("Exception caught mapping Camunda JSON response to object",
+        assertEquals("Request Failed due to BPEL error with HTTP Status = 401 UNAUTHORIZED",
                 realResponse.getServiceException().getText());
     }
 
@@ -2430,7 +2429,7 @@ public class ServiceInstancesTest extends BaseTest {
         ResponseEntity<String> response =
                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
 
-        assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), response.getStatusCode().value());
+        assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
         RequestError realResponse = mapper.readValue(response.getBody(), RequestError.class);
         assertEquals("Exception caught mapping Camunda JSON response to object",
                 realResponse.getServiceException().getText());
index 1d67222..1429ac9 100644 (file)
@@ -55,8 +55,8 @@ mso:
       versions:
         apiMinorVersion: 0
         apiPatchVersion: 0
-  camundaURL: http://localhost:${wiremock.server.port}/
-  camundaAuth: E8E19DD16CC90D2E458E8FF9A884CC0452F8F3EB8E321F96038DE38D5C1B0B02DFAE00B88E2CF6E2A4101AB2C011FC161212EE
+  camundaURL: http://localhost:${wiremock.server.port}
+  camundaAuth: 015E7ACF706C6BBF85F2079378BDD2896E226E09D13DC2784BA309E27D59AB9FAD3A5E039DF0BB8408
   async:
     core-pool-size: 50
     max-pool-size: 50