aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Smokowski <ss835w@att.com>2020-04-28 16:37:00 +0000
committerGerrit Code Review <gerrit@onap.org>2020-04-28 16:37:00 +0000
commit17632353502e1750d96b21dc6b201994b626d481 (patch)
tree46c27aaf3022c32634dff12f45b7a4bf66543019
parent746962d1b9e1aa7399436151fbb35c4efb0347f2 (diff)
parent593187e78b52cada60430d4006900a3b50da170c (diff)
Merge "refactor camunda client in apih"
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaClient.java199
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaTaskClient.java96
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/RequestClient.java86
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/RequestClientFactory.java66
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/ResponseHandler.java165
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ApiException.java30
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/BPMNFailureException.java8
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ClientConnectionException.java2
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaClientTest.java221
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java140
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/RequestClientTest.java60
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/ResponseHandlerTest.java126
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/test/resources/CamundaClientTest/CamundaFailure.json7
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/E2EServiceInstances.java333
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ManualTasks.java120
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java160
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/TasksHandler.java81
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/AbstractRestHandler.java13
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/E2EServiceInstancesTest.java12
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ManualTasksTest.java3
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java5
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/test/resources/application-test.yaml4
22 files changed, 503 insertions, 1434 deletions
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaClient.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaClient.java
index bc8af6e690..33e4740740 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaClient.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaClient.java
@@ -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
index d6d999b4b5..0000000000
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/CamundaTaskClient.java
+++ /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
index 318b3ba5af..0000000000
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/RequestClient.java
+++ /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
index c2ffa7e004..0000000000
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/RequestClientFactory.java
+++ /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;
- }
-
-
-
-}
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/ResponseHandler.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/ResponseHandler.java
index 806646022c..af1258e963 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/ResponseHandler.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/common/ResponseHandler.java
@@ -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;
- }
-
}
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ApiException.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ApiException.java
index ab2ce10690..2ca18de9e3 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ApiException.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ApiException.java
@@ -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;
+ }
}
}
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/BPMNFailureException.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/BPMNFailureException.java
index 97d46bd6f1..0d2b9be93a 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/BPMNFailureException.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/BPMNFailureException.java
@@ -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);
}
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ClientConnectionException.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ClientConnectionException.java
index 4af5289ad7..9ef2072fef 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ClientConnectionException.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ClientConnectionException.java
@@ -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);
diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaClientTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaClientTest.java
index 94c62a9689..e51f0e2412 100644
--- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaClientTest.java
+++ b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaClientTest.java
@@ -24,109 +24,61 @@
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
index 9e9ab6048e..0000000000
--- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/CamundaTaskClientTest.java
+++ /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
index 86b12ae8f6..0000000000
--- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/RequestClientTest.java
+++ /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);
- }
-
-}
diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/ResponseHandlerTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/ResponseHandlerTest.java
index 2095a9117d..e6f7a3663a 100644
--- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/ResponseHandlerTest.java
+++ b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/common/ResponseHandlerTest.java
@@ -23,122 +23,42 @@
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
index 0000000000..2d9e3ddef8
--- /dev/null
+++ b/mso-api-handlers/mso-api-handler-common/src/test/resources/CamundaClientTest/CamundaFailure.json
@@ -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
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/E2EServiceInstances.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/E2EServiceInstances.java
index d4bc4fd165..fae55ff84b 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/E2EServiceInstances.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/E2EServiceInstances.java
@@ -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;
@@ -106,9 +107,6 @@ public class E2EServiceInstances {
private MsoRequest msoRequest;
@Autowired
- private RequestClientFactory requestClientFactory;
-
- @Autowired
private RequestsDbClient requestsDbClient;
@Autowired
@@ -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);
}
/**
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ManualTasks.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ManualTasks.java
index 0ec61785fd..b9995bb855 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ManualTasks.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ManualTasks.java
@@ -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) {
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java
index a1e878176b..a61975f529 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java
@@ -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;
@@ -115,9 +112,6 @@ public class RequestHandlerUtils extends AbstractRestHandler {
private Environment env;
@Autowired
- private RequestClientFactory reqClientFactory;
-
- @Autowired
private ResponseBuilder builder;
@Autowired
@@ -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 {
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/TasksHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/TasksHandler.java
index 418c702768..dadb7c7558 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/TasksHandler.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/TasksHandler.java
@@ -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) {
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/AbstractRestHandler.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/AbstractRestHandler.java
index 3fd672bf42..c806e9fc1b 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/AbstractRestHandler.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/handler/AbstractRestHandler.java
@@ -20,16 +20,15 @@
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);
}
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/E2EServiceInstancesTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/E2EServiceInstancesTest.java
index 979aa8fbb1..86e847234b 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/E2EServiceInstancesTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/E2EServiceInstancesTest.java
@@ -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";
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ManualTasksTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ManualTasksTest.java
index fcf25b23e9..f4ff19f53d 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ManualTasksTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ManualTasksTest.java
@@ -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);
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java
index 1332ffd913..143c92861a 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java
@@ -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());
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/application-test.yaml b/mso-api-handlers/mso-api-handler-infra/src/test/resources/application-test.yaml
index 1d6722278c..1429ac9b52 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/test/resources/application-test.yaml
+++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/application-test.yaml
@@ -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