/*- * ============LICENSE_START======================================================= * OPENECOMP - MSO * ================================================================================ * 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.openecomp.mso.bpmn.infrastructure.scripts; import org.openecomp.mso.bpmn.core.json.JsonUtils import org.openecomp.mso.bpmn.common.scripts.AaiUtil import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil import org.openecomp.mso.bpmn.common.scripts.NetworkUtils import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils import org.openecomp.mso.bpmn.common.scripts.VidUtils import org.openecomp.mso.bpmn.core.WorkflowException import org.openecomp.mso.rest.APIResponse; import org.openecomp.mso.rest.RESTClient import org.openecomp.mso.rest.RESTConfig import java.util.UUID; import org.camunda.bpm.engine.delegate.BpmnError import org.camunda.bpm.engine.runtime.Execution import org.apache.commons.lang3.* import org.apache.commons.codec.binary.Base64; import org.springframework.web.util.UriUtils import groovy.xml.XmlUtil import groovy.json.* public class DoDeleteNetworkInstance extends AbstractServiceTaskProcessor { String Prefix= "DELNWKI_" String groovyClassName = "DoDeleteNetworkInstance" ExceptionUtil exceptionUtil = new ExceptionUtil() JsonUtils jsonUtil = new JsonUtils() VidUtils vidUtils = new VidUtils(this) NetworkUtils networkUtils = new NetworkUtils() SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils() public InitializeProcessVariables(Execution execution){ /* Initialize all the process variables in this block */ execution.setVariable(Prefix + "networkRequest", "") execution.setVariable(Prefix + "isSilentSuccess", false) execution.setVariable(Prefix + "Success", false) execution.setVariable(Prefix + "requestId", "") execution.setVariable(Prefix + "source", "") execution.setVariable(Prefix + "lcpCloudRegion", "") execution.setVariable(Prefix + "networkInputs", "") execution.setVariable(Prefix + "tenantId", "") execution.setVariable(Prefix + "queryAAIRequest","") execution.setVariable(Prefix + "queryAAIResponse", "") execution.setVariable(Prefix + "aaiReturnCode", "") execution.setVariable(Prefix + "isAAIGood", false) execution.setVariable(Prefix + "isVfRelationshipExist", false) // AAI query Cloud Region execution.setVariable(Prefix + "queryCloudRegionRequest","") execution.setVariable(Prefix + "queryCloudRegionReturnCode","") execution.setVariable(Prefix + "queryCloudRegionResponse","") execution.setVariable(Prefix + "cloudRegionPo","") execution.setVariable(Prefix + "cloudRegionSdnc","") execution.setVariable(Prefix + "deleteNetworkRequest", "") execution.setVariable(Prefix + "deleteNetworkResponse", "") execution.setVariable(Prefix + "networkReturnCode", "") execution.setVariable(Prefix + "rollbackNetworkRequest", "") execution.setVariable(Prefix + "deleteSDNCRequest", "") execution.setVariable(Prefix + "deleteSDNCResponse", "") execution.setVariable(Prefix + "sdncReturnCode", "") execution.setVariable(Prefix + "sdncResponseSuccess", false) execution.setVariable(Prefix + "deactivateSDNCRequest", "") execution.setVariable(Prefix + "deactivateSDNCResponse", "") execution.setVariable(Prefix + "deactivateSdncReturnCode", "") execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", "") execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", "") execution.setVariable(Prefix + "isException", false) } // ************************************************** // Pre or Prepare Request Section // ************************************************** public void preProcessRequest (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " ***** Inside preProcessRequest() of " + groovyClassName + " Request ***** ", isDebugEnabled) // initialize flow variables InitializeProcessVariables(execution) try { // get incoming message/input execution.setVariable("action", "DELETE") String deleteNetwork = execution.getVariable("bpmnRequest") if (deleteNetwork != null) { if (deleteNetwork.contains("requestDetails")) { // JSON format request is sent, create xml try { def prettyJson = JsonOutput.prettyPrint(deleteNetwork.toString()) utils.log("DEBUG", " Incoming message formatted . . . : " + '\n' + prettyJson, isDebugEnabled) deleteNetwork = vidUtils.createXmlNetworkRequestInfra(execution, deleteNetwork) } catch (Exception ex) { String dataErrorMessage = " Invalid json format Request - " + ex.getMessage() utils.log("DEBUG", dataErrorMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage) } } else { // XML format request is sent } } else { // vIPR format request is sent, create xml from individual variables deleteNetwork = vidUtils.createXmlNetworkRequestInstance(execution) } deleteNetwork = utils.formatXml(deleteNetwork) utils.logAudit(deleteNetwork) execution.setVariable(Prefix + "networkRequest", deleteNetwork) utils.log("DEBUG", Prefix + "networkRequest - " + '\n' + deleteNetwork, isDebugEnabled) // validate 'backout-on-failure' to override 'URN_mso_rollback' boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, deleteNetwork) execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled) utils.log("DEBUG", Prefix + "rollbackEnabled - " + rollbackEnabled, isDebugEnabled) String networkInputs = utils.getNodeXml(deleteNetwork, "network-inputs", false).replace("tag0:","").replace(":tag0","") execution.setVariable(Prefix + "networkInputs", networkInputs) // prepare messageId String messageId = execution.getVariable("testMessageId") // for testing if (messageId == null || messageId == "") { messageId = UUID.randomUUID() utils.log("DEBUG", Prefix + "messageId, random generated: " + messageId, isDebugEnabled) } else { utils.log("DEBUG", Prefix + "messageId, pre-assigned: " + messageId, isDebugEnabled) } execution.setVariable(Prefix + "messageId", messageId) String source = utils.getNodeText1(deleteNetwork, "source") execution.setVariable(Prefix + "source", source) utils.log("DEBUG", Prefix + "source - " + source, isDebugEnabled) String networkId = "" if (utils.nodeExists(networkInputs, "network-id")) { networkId = utils.getNodeText1(networkInputs, "network-id") if (networkId == null || networkId == "" || networkId == 'null' ) { sendSyncError(execution) // missing value of network-id String dataErrorMessage = "network-request has missing 'network-id' element/value." utils.log("DEBUG", " Invalid Request - " + dataErrorMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage) } } // lcpCloudRegion or tenantId not sent, will be extracted from query AA&I def lcpCloudRegion = null if (utils.nodeExists(networkInputs, "aic-cloud-region")) { lcpCloudRegion = utils.getNodeText1(networkInputs, "aic-cloud-region") if (lcpCloudRegion == 'null') { lcpCloudRegion = null } } execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion) utils.log("DEBUG", "lcpCloudRegion : " + lcpCloudRegion, isDebugEnabled) String tenantId = null if (utils.nodeExists(networkInputs, "tenant-id")) { tenantId = utils.getNodeText1(networkInputs, "tenant-id") if (tenantId == 'null') { tenantId = null } } execution.setVariable(Prefix + "tenantId", tenantId) utils.log("DEBUG", "tenantId : " + tenantId, isDebugEnabled) String sdncVersion = execution.getVariable("sdncVersion") utils.log("DEBUG", "sdncVersion? : " + sdncVersion, isDebugEnabled) // PO Authorization Info / headers Authorization= String basicAuthValuePO = execution.getVariable("URN_mso_adapters_po_auth") utils.log("DEBUG", " Obtained BasicAuth userid password for PO/SDNC adapter: " + basicAuthValuePO, isDebugEnabled) try { def encodedString = utils.getBasicAuth(basicAuthValuePO, execution.getVariable("URN_mso_msoKey")) execution.setVariable("BasicAuthHeaderValuePO",encodedString) execution.setVariable("BasicAuthHeaderValueSDNC", encodedString) } catch (IOException ex) { String dataErrorMessage = " Unable to encode PO/SDNC user/password string - " + ex.getMessage() utils.log("DEBUG", dataErrorMessage, , isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage) } } catch (BpmnError e) { throw e; } catch (Exception ex){ // caught exception String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, PreProcessRequest() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } public void callRESTQueryAAI (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " ***** Inside callRESTQueryAAI() of DoDoDeleteNetworkInstance ***** " , isDebugEnabled) // get variables String networkInputs = execution.getVariable(Prefix + "networkInputs") String networkId = utils.getNodeText(networkInputs, "network-id") networkId = UriUtils.encode(networkId,"UTF-8") String messageId = execution.getVariable(Prefix + "messageId") // Prepare AA&I url String aai_endpoint = execution.getVariable("URN_aai_endpoint") AaiUtil aaiUriUtil = new AaiUtil(this) String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution) String queryAAIRequest = "${aai_endpoint}${aai_uri}/" + networkId + "?depth=1" utils.logAudit(queryAAIRequest) execution.setVariable(Prefix + "queryAAIRequest", queryAAIRequest) utils.log("DEBUG", Prefix + "AAIRequest - " + "\n" + queryAAIRequest, isDebugEnabled) RESTConfig config = new RESTConfig(queryAAIRequest); ExceptionUtil exceptionUtil = new ExceptionUtil() Boolean isVfRelationshipExist = false try { RESTClient client = new RESTClient(config).addHeader("X-TransactionId", messageId) .addHeader("X-FromAppId", "MSO") .addHeader("Content-Type", "application/xml") .addHeader("Accept","application/xml"); APIResponse response = client.get() String returnCode = response.getStatusCode() execution.setVariable(Prefix + "aaiReturnCode", returnCode) utils.log("DEBUG", " ***** AAI Response Code : " + returnCode, isDebugEnabled) String aaiResponseAsString = response.getResponseBodyAsString() aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString) execution.setVariable(Prefix + "queryAAIResponse", aaiResponseAsString) if (returnCode=='200' || returnCode=='204') { utils.logAudit(aaiResponseAsString) execution.setVariable(Prefix + "isAAIGood", true) utils.log("DEBUG", " AAI Query Success REST Response - " + "\n" + aaiResponseAsString, isDebugEnabled) // verify if vf or vnf relationship exist if (utils.nodeExists(aaiResponseAsString, "relationship")) { NetworkUtils networkUtils = new NetworkUtils() isVfRelationshipExist = networkUtils.isVfRelationshipExist(aaiResponseAsString) execution.setVariable(Prefix + "isVfRelationshipExist", isVfRelationshipExist) if (isVfRelationshipExist == true) { String relationshipMessage = "AAI Query Success Response but 'vf-module' relationship exist, not allowed to delete: network Id: " + networkId exceptionUtil.buildWorkflowException(execution, 2500, relationshipMessage) } else { // verify if lcpCloudRegion was sent as input, if not get value from AAI Response if (execution.getVariable(Prefix + "lcpCloudRegion") == null ) { String lcpCloudRegion = networkUtils.getCloudRegion(aaiResponseAsString) execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion) utils.log("DEBUG", " Get AAI getCloudRegion() : " + lcpCloudRegion, isDebugEnabled) } if (execution.getVariable(Prefix + "tenantId") == null ) { String tenantId = networkUtils.getTenantId(aaiResponseAsString) execution.setVariable(Prefix + "tenantId", tenantId) utils.log("DEBUG", " Get AAI getTenantId() : " + tenantId, isDebugEnabled) } } } utils.log("DEBUG", Prefix + "isVfRelationshipExist - " + isVfRelationshipExist, isDebugEnabled) } else { execution.setVariable(Prefix + "isAAIGood", false) if (returnCode=='404' || aaiResponseAsString == "" || aaiResponseAsString == null) { // not found // empty aai response execution.setVariable(Prefix + "isSilentSuccess", true) utils.log("DEBUG", " AAI Query is Silent Success", isDebugEnabled) } else { if (aaiResponseAsString.contains("RESTFault")) { WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution) execution.setVariable("WorkflowException", exceptionObject) } else { // aai all errors String dataErrorMessage = "Unexpected Error Response from callRESTQueryAAI() - " + returnCode utils.log("DEBUG", dataErrorMessage, isDebugEnabled) exceptionUtil.buildWorkflowException(execution, 2500, dataErrorMessage) } } } utils.log("DEBUG", " AAI Query call, isAAIGood? : " + execution.getVariable(Prefix + "isAAIGood"), isDebugEnabled) } catch (Exception ex) { // caught exception String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, callRESTQueryAAI() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } public void callRESTQueryAAICloudRegion (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ***** Inside callRESTQueryAAICloudRegion of DoDeleteNetworkInstance ***** " , isDebugEnabled) try { String networkInputs = execution.getVariable(Prefix + "networkInputs") // String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region") String cloudRegion = execution.getVariable(Prefix + "lcpCloudRegion") cloudRegion = UriUtils.encode(cloudRegion,"UTF-8") // Prepare AA&I url String aai_endpoint = execution.getVariable("URN_aai_endpoint") AaiUtil aaiUtil = new AaiUtil(this) String aai_uri = aaiUtil.getCloudInfrastructureCloudRegionUri(execution) String queryCloudRegionRequest = "${aai_endpoint}${aai_uri}/" + cloudRegion utils.logAudit(queryCloudRegionRequest) execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest) utils.log("DEBUG", Prefix + "queryCloudRegionRequest - " + "\n" + queryCloudRegionRequest, isDebugEnabled) String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion) String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion) if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) { execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo) execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc) } else { String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode") utils.log("DEBUG", dataErrorMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage) } } catch (BpmnError e) { throw e; } catch (Exception ex) { // caught exception String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, callRESTQueryAAICloudRegion(). Unexpected Response from AAI - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } public void prepareNetworkRequest (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ***** Inside prepareNetworkRequest of DoDeleteNetworkInstance ***** ", isDebugEnabled) ExceptionUtil exceptionUtil = new ExceptionUtil() try { // get variables String networkRequest = execution.getVariable(Prefix + "networkRequest") String cloudSiteId = execution.getVariable(Prefix + "cloudRegionPo") String tenantId = execution.getVariable(Prefix + "tenantId") String queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse") String networkType = utils.getNodeText1(queryAAIResponse, "network-type") String networkId = utils.getNodeText1(queryAAIResponse, "network-id") String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled") String networkStackId = "" networkStackId = utils.getNodeText1(queryAAIResponse, "heat-stack-id") if (networkStackId == 'null' || networkStackId == "" || networkStackId == null) { networkStackId = "force_delete" } String requestId = execution.getVariable("msoRequestId") if (requestId != null) { execution.setVariable("mso-request-id", requestId) } else { requestId = execution.getVariable("mso-request-id") } String serviceInstanceId = execution.getVariable("serviceInstanceId") // Added new Elements String messageId = execution.getVariable(Prefix + "messageId") String notificationUrl = "" //TODO - is this coming from URN? What variable/value to use? //String notificationUrl = execution.getVariable("URN_?????") //TODO - is this coming from URN? What variable/value to use? String modelCustomizationUuid = "" if (utils.nodeExists(networkRequest, "networkModelInfo")) { String networkModelInfo = utils.getNodeXml(networkRequest, "networkModelInfo", false).replace("tag0:","").replace(":tag0","") modelCustomizationUuid = utils.getNodeText1(networkModelInfo, "modelCustomizationUuid") } String deleteNetworkRequest = """ ${cloudSiteId} ${tenantId} ${networkId} ${networkStackId} ${networkType} ${modelCustomizationUuid} true ${requestId} ${serviceInstanceId} ${messageId} ${notificationUrl} """.trim() utils.log("DEBUG", Prefix + "deleteNetworkRequest - " + "\n" + deleteNetworkRequest, isDebugEnabled) // Format Response String buildDeleteNetworkRequestAsString = utils.formatXml(deleteNetworkRequest) utils.logAudit(buildDeleteNetworkRequestAsString) utils.log("DEBUG", Prefix + "deleteNetworkRequestAsString - " + "\n" + buildDeleteNetworkRequestAsString, isDebugEnabled) String restURL = execution.getVariable("URN_mso_adapters_network_rest_endpoint") execution.setVariable("URN_mso_adapters_network_rest_endpoint", restURL + "/" + networkId) utils.log("DEBUG", "URN_mso_adapters_network_rest_endpoint - " + "\n" + restURL + "/" + networkId, isDebugEnabled) execution.setVariable(Prefix + "deleteNetworkRequest", buildDeleteNetworkRequestAsString) utils.log("DEBUG", Prefix + "deleteNetworkRequest - " + "\n" + buildDeleteNetworkRequestAsString, isDebugEnabled) } catch (Exception ex) { // caught exception String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareNetworkRequest(). Unexpected Response from AAI - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } /** * This method is used instead of an HTTP Connector task because the * connector does not allow DELETE with a body. */ public void sendRequestToVnfAdapter(Execution execution) { def method = getClass().getSimpleName() + '.sendRequestToVnfAdapter(' + 'execution=' + execution.getId() + ')' def isDebugEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugEnabled) try { String vnfAdapterUrl = execution.getVariable("URN_mso_adapters_network_rest_endpoint") String vnfAdapterRequest = execution.getVariable(Prefix + "deleteNetworkRequest") RESTConfig config = new RESTConfig(vnfAdapterUrl) RESTClient client = new RESTClient(config). addHeader("Content-Type", "application/xml"). addAuthorizationHeader(execution.getVariable("BasicAuthHeaderValuePO")); APIResponse response; response = client.httpDelete(vnfAdapterRequest) execution.setVariable(Prefix + "networkReturnCode", response.getStatusCode()) execution.setVariable(Prefix + "deleteNetworkResponse", response.getResponseBodyAsString()) } catch (Exception ex) { // caught exception String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, sendRequestToVnfAdapter() - " + ex.getMessage() logError(exceptionMessage) utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } public void prepareSDNCRequest (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ***** Inside prepareSDNCRequest of DoDeleteNetworkInstance ***** ", isDebugEnabled) try { // get variables String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback") String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest") String networkId = "" if (utils.nodeExists(deleteNetworkInput, "network-id")) { networkId = utils.getNodeText1(deleteNetworkInput, "network-id") } if (networkId == 'null') {networkId = ""} String serviceInstanceId = utils.getNodeText1(deleteNetworkInput, "service-instance-id") // get/set 'msoRequestId' and 'mso-request-id' String requestId = execution.getVariable("msoRequestId") if (requestId != null) { execution.setVariable("mso-request-id", requestId) } else { requestId = execution.getVariable("mso-request-id") } execution.setVariable(Prefix + "requestId", requestId) utils.log("DEBUG", Prefix + "requestId " + requestId, isDebugEnabled) String queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse") SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils() String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc") // 1. prepare delete topology via SDNC Adapter SUBFLOW call String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "delete", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null) String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest) utils.logAudit(sndcTopologyDeleteRequesAsString) execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString) utils.log("DEBUG", Prefix + "deleteSDNCRequest - " + "\n" + sndcTopologyDeleteRequesAsString, isDebugEnabled) } catch (Exception ex) { // caught exception String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage() logError(exceptionMessage) utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } public void prepareRpcSDNCRequest (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ***** Inside prepareRpcSDNCRequest of DoDeleteNetworkInstance ***** ", isDebugEnabled) try { // get variables String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback") String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest") String networkId = "" if (utils.nodeExists(deleteNetworkInput, "network-id")) { networkId = utils.getNodeText1(deleteNetworkInput, "network-id") } if (networkId == 'null') {networkId = ""} String serviceInstanceId = utils.getNodeText1(deleteNetworkInput, "service-instance-id") SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils() String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc") // 1. prepare delete topology via SDNC Adapter SUBFLOW call String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null) String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest) utils.logAudit(sndcTopologyDeleteRequesAsString) execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString) utils.log("DEBUG", Prefix + "deleteSDNCRequest - " + "\n" + sndcTopologyDeleteRequesAsString, isDebugEnabled) } catch (Exception ex) { // caught exception String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage() logError(exceptionMessage) utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } public void prepareRpcSDNCDeactivate(Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " ***** Inside prepareRpcSDNCDeactivate() of DoDeleteNetworkInstance ***** ", isDebugEnabled) try { // get variables String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback") String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest") String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc") String networkId = "" if (utils.nodeExists(deleteNetworkInput, "network-id")) { networkId = utils.getNodeText1(deleteNetworkInput, "network-id") } if (networkId == 'null') {networkId = ""} String serviceInstanceId = utils.getNodeText1(deleteNetworkInput, "service-instance-id") String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null) String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest) execution.setVariable(Prefix + "deactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString) utils.log("DEBUG", " Preparing request for RPC SDNC Topology deactivate - " + "\n" + sndcTopologyRollbackRpcRequestAsString, isDebugEnabled) } catch (Exception ex) { String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage) } } // ************************************************** // Post or Validate Response Section // ************************************************** public void validateNetworkResponse (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ***** Inside validateNetworkResponse of DoDeleteNetworkInstance *****", isDebugEnabled) try { String returnCode = execution.getVariable(Prefix + "networkReturnCode") String networkResponse = execution.getVariable(Prefix + "deleteNetworkResponse") utils.log("DEBUG", " Network Adapter responseCode: " + returnCode, isDebugEnabled) utils.log("DEBUG", "Network Adapter Response - " + "\n" + networkResponse, isDebugEnabled) utils.logAudit(networkResponse) String errorMessage = "" if (returnCode == "200") { utils.log("DEBUG", " Network Adapter Response is successful - " + "\n" + networkResponse, isDebugEnabled) // prepare rollback data String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","") if ((rollbackData == null) || (rollbackData.isEmpty())) { utils.log("DEBUG", " Network Adapter 'rollback' data is not Sent: " + "\n" + networkResponse, isDebugEnabled) execution.setVariable(Prefix + "rollbackNetworkRequest", "") } else { String rollbackNetwork = """ ${rollbackData} """ String rollbackNetworkXml = utils.formatXml(rollbackNetwork) execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml) utils.log("DEBUG", " Network Adapter rollback data - " + "\n" + rollbackNetworkXml, isDebugEnabled) } } else { // network error if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) { //4xx, 5xx if (networkResponse.contains("deleteNetworkError") ) { networkResponse = networkResponse.replace('', '') errorMessage = utils.getNodeText1(networkResponse, "message") errorMessage = "Received error from Network Adapter: " + errorMessage exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage) } else { // CatchAll exception if (returnCode == "500") { errorMessage = "JBWEB000065: HTTP Status 500." } else { errorMessage = "Return code is " + returnCode } errorMessage = "Received error from Network Adapter: " + errorMessage exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage) } } else { // CatchAll exception String dataErrorMessage = "Received error from Network Adapter. Return code is: " + returnCode exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage) } } } catch (BpmnError e) { throw e; } catch (Exception ex) { // caught exception String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, validateNetworkResponse() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } public void validateSDNCResponse (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ***** Inside validateSDNCResponse of DoDeleteNetworkInstance ***** ", isDebugEnabled) String response = execution.getVariable(Prefix + "deleteSDNCResponse") boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator") WorkflowException workflowException = execution.getVariable("WorkflowException") SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this) sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator) // reset variable String deleteSDNCResponseDecodeXml = sdncAdapterUtils.decodeXML(execution.getVariable(Prefix + "deleteSDNCResponse")) deleteSDNCResponseDecodeXml = deleteSDNCResponseDecodeXml.replace("&", "&").replace('', "") execution.setVariable(Prefix + "deleteSDNCResponse", deleteSDNCResponseDecodeXml) if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, prefix+'sdncResponseSuccess' execution.setVariable(Prefix + "isSdncRollbackNeeded", true) // execution.setVariable(Prefix + "isPONR", true) utils.log("DEBUG", "Successfully Validated SDNC Response", isDebugEnabled) } else { utils.log("DEBUG", "Did NOT Successfully Validated SDNC Response", isDebugEnabled) throw new BpmnError("MSOWorkflowException") } } public void validateRpcSDNCDeactivateResponse (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " ***** Inside validateRpcSDNCDeactivateResponse() of DoDeleteNetworkInstance ***** ", isDebugEnabled) String response = execution.getVariable(Prefix + "deactivateSDNCResponse") boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator") WorkflowException workflowException = execution.getVariable("WorkflowException") SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this) sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator) // reset variable String assignSDNCResponseDecodeXml = sdncAdapterUtils.decodeXML(execution.getVariable(Prefix + "deactivateSDNCResponse")) assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace("&", "&").replace('', "") execution.setVariable(Prefix + "deactivateSDNCResponse", assignSDNCResponseDecodeXml) if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess' execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", true) utils.log("DEBUG", "Successfully Validated Rpc SDNC Activate Response", isDebugEnabled) } else { utils.log("DEBUG", "Did NOT Successfully Validated Rpc SDNC Deactivate Response", isDebugEnabled) throw new BpmnError("MSOWorkflowException") } } public void prepareRpcSDNCDeactivateRollback(Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " ***** Inside prepareRpcSDNCDeactivateRollback() of DoDeleteNetworkInstance ***** ", isDebugEnabled) try { // get variables String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback") String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest") String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc") String deactivateSDNCResponse = execution.getVariable(Prefix + "deactivateSDNCResponse") String networkId = utils.getNodeText1(deactivateSDNCResponse, "network-id") if (networkId == 'null') {networkId = ""} String serviceInstanceId = utils.getNodeText1(deleteNetworkInput, "service-instance-id") // 2. prepare rollback topology via SDNC Adapter SUBFLOW call String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "activate", "ActivateNetworkInstance", cloudRegionId, networkId, null) String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest) execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString) utils.log("DEBUG", " Preparing request for RPC SDNC Topology 'activate-ActivateNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString, isDebugEnabled) } catch (Exception ex) { String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCDeactivateRollback() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage) } } public void prepareRollbackData(Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " ***** Inside prepareRollbackData() of DoDeleteNetworkInstance ***** ", isDebugEnabled) try { Map rollbackData = new HashMap(); String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest") if (rollbackNetworkRequest != null) { if (rollbackNetworkRequest != "") { rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest")) } } String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest") if (rollbackDeactivateSDNCRequest != null) { if (rollbackDeactivateSDNCRequest != "") { rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")) } } execution.setVariable("rollbackData", rollbackData) utils.log("DEBUG", "** rollbackData : " + rollbackData, isDebugEnabled) execution.setVariable("WorkflowException", execution.getVariable("WorkflowException")) utils.log("DEBUG", "** WorkflowException : " + execution.getVariable("WorkflowException"), isDebugEnabled) } catch (Exception ex) { String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRollbackData() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage) } } public void postProcessResponse (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ***** Inside postProcessResponse of DoDeleteNetworkInstance ***** ", isDebugEnabled) try { utils.log("DEBUG", " ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"), isDebugEnabled) if (execution.getVariable(Prefix + "isException") == false) { execution.setVariable(Prefix + "Success", true) execution.setVariable("WorkflowException", null) if (execution.getVariable(Prefix + "isSilentSuccess") == true) { execution.setVariable("rolledBack", false) } else { execution.setVariable("rolledBack", true) } prepareSuccessRollbackData(execution) // populate rollbackData } else { execution.setVariable(Prefix + "Success", false) execution.setVariable("rollbackData", null) String exceptionMessage = " Exception encountered in MSO Bpmn. " if (execution.getVariable("workflowException") != null) { // Output of Rollback flow. utils.log("DEBUG", " ***** workflowException: " + execution.getVariable("workflowException"), isDebugEnabled) WorkflowException wfex = execution.getVariable("workflowException") exceptionMessage = wfex.getErrorMessage() } else { if (execution.getVariable(Prefix + "WorkflowException") != null) { WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException") exceptionMessage = pwfex.getErrorMessage() } else { if (execution.getVariable("WorkflowException") != null) { WorkflowException pwfex = execution.getVariable("WorkflowException") exceptionMessage = pwfex.getErrorMessage() } } } // going to the Main flow: a-la-carte or macro utils.log("DEBUG", " ***** postProcessResponse(), BAD !!!", isDebugEnabled) exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage) throw new BpmnError("MSOWorkflowException") } } catch(BpmnError b){ utils.log("DEBUG", "Rethrowing MSOWorkflowException", isDebugEnabled) throw b } catch (Exception ex) { // caught exception String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, postProcessResponse() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage) throw new BpmnError("MSOWorkflowException") } } public void prepareSuccessRollbackData(Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " ***** Inside prepareSuccessRollbackData() of DoDeleteNetworkInstance ***** ", isDebugEnabled) try { if (execution.getVariable("sdncVersion") == '1702') { prepareRpcSDNCDeactivateRollback(execution) prepareRpcSDNCUnassignRollback(execution) } else { prepareSDNCRollback(execution) } Map rollbackData = new HashMap(); String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest") if (rollbackSDNCRequest != null) { if (rollbackSDNCRequest != "") { rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest")) } } String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest") if (rollbackNetworkRequest != null) { if (rollbackNetworkRequest != "") { rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest")) } } String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest") if (rollbackDeactivateSDNCRequest != null) { if (rollbackDeactivateSDNCRequest != "") { rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")) } } execution.setVariable("rollbackData", rollbackData) utils.log("DEBUG", "** rollbackData : " + rollbackData, isDebugEnabled) execution.setVariable("WorkflowException", null) } catch (Exception ex) { String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage) } } public void prepareRpcSDNCUnassignRollback(Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " ***** Inside prepareRpcSDNCUnassignRollbac() of DoDeleteNetworkInstance ***** ", isDebugEnabled) try { // get variables String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback") String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest") String deleteSDNCResponse = execution.getVariable(Prefix + "deleteSDNCResponse") String networkId = utils.getNodeText1(deleteSDNCResponse, "network-id") if (networkId == 'null') {networkId = ""} String serviceInstanceId = utils.getNodeText1(deleteNetworkInput, "service-instance-id") SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils() String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc") // 1. prepare delete topology via SDNC Adapter SUBFLOW call String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null) String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest) utils.logAudit(sndcTopologyDeleteRequesAsString) execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString) utils.log("DEBUG", Prefix + "rollbackSDNCRequest" + "\n" + sndcTopologyDeleteRequesAsString, isDebugEnabled) utils.log("DEBUG", " Preparing request for RPC SDNC Topology 'assign-CreateNetworkInstance' rollback . . . - " + "\n" + sndcTopologyDeleteRequesAsString, isDebugEnabled) } catch (Exception ex) { String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCUnassignRollback() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage) } } public void prepareSDNCRollback (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ***** Inside prepareSDNCRollback of DoDeleteNetworkInstance ***** ", isDebugEnabled) try { // get variables String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback") String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest") String networkId = "" if (utils.nodeExists(deleteNetworkInput, "network-id")) { networkId = utils.getNodeText1(deleteNetworkInput, "network-id") } if (networkId == 'null') {networkId = ""} String serviceInstanceId = utils.getNodeText1(deleteNetworkInput, "service-instance-id") // get/set 'msoRequestId' and 'mso-request-id' String requestId = execution.getVariable("msoRequestId") if (requestId != null) { execution.setVariable("mso-request-id", requestId) } else { requestId = execution.getVariable("mso-request-id") } execution.setVariable(Prefix + "requestId", requestId) String queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse") SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils() String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc") // 1. prepare delete topology via SDNC Adapter SUBFLOW call String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "rollback", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null) String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest) utils.logAudit(sndcTopologyDeleteRequesAsString) execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString) utils.log("DEBUG", Prefix + "rollbackSDNCRequest - " + "\n" + sndcTopologyDeleteRequesAsString, isDebugEnabled) utils.log("DEBUG", " Preparing request for RPC SDNC Topology 'rollback-DisconnectNetworkRequest' rollback . . . - " + "\n" + sndcTopologyDeleteRequesAsString, isDebugEnabled) } catch (Exception ex) { // caught exception String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRollback() - " + ex.getMessage() logError(exceptionMessage) utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } public void setExceptionFlag(Execution execution){ def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " ***** Inside setExceptionFlag() of DoDeleteNetworkInstance ***** ", isDebugEnabled) try { execution.setVariable(Prefix + "isException", true) if (execution.getVariable("SavedWorkflowException1") != null) { execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1")) } else { execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException")) } utils.log("DEBUG", Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"), isDebugEnabled) } catch(Exception ex){ String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance flow. setExceptionFlag(): " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage) } } // ******************************* // Build Error Section // ******************************* public void processJavaException(Execution execution){ def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) try{ utils.log("DEBUG", "Caught a Java Exception", isDebugEnabled) utils.log("DEBUG", "Started processJavaException Method", isDebugEnabled) utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled) execution.setVariable("UnexpectedError", "Caught a Java Lang Exception") // Adding this line temporarily until this flows error handling gets updated exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception") }catch(Exception e){ utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled) execution.setVariable("UnexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method") } utils.log("DEBUG", "Completed processJavaException Method of " + Prefix, isDebugEnabled) } }