2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.so.bpmn.infrastructure.scripts;
25 import javax.ws.rs.core.UriBuilder
26 import javax.xml.parsers.DocumentBuilder
27 import javax.xml.parsers.DocumentBuilderFactory
28 import org.apache.commons.lang3.*
29 import org.camunda.bpm.engine.delegate.BpmnError
30 import org.camunda.bpm.engine.delegate.DelegateExecution
31 import org.onap.so.bpmn.common.scripts.AaiUtil
32 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
33 import org.onap.so.bpmn.common.scripts.ExceptionUtil
34 import org.onap.so.bpmn.common.scripts.MsoUtils
35 import org.onap.so.bpmn.common.scripts.NetworkUtils
36 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
37 import org.onap.so.bpmn.common.scripts.VidUtils
38 import org.onap.so.bpmn.core.UrnPropertiesReader
39 import org.onap.so.bpmn.core.WorkflowException
40 import org.onap.so.bpmn.core.json.JsonUtils
41 import org.onap.aaiclient.client.aai.AAIObjectType
42 import org.onap.aaiclient.client.aai.AAIResourcesClient
43 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
44 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
45 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
46 import org.onap.aaiclient.client.graphinventory.entities.uri.Depth
47 import org.onap.so.constants.Defaults
48 import org.slf4j.Logger
49 import org.slf4j.LoggerFactory
51 import org.springframework.web.util.UriUtils
52 import org.w3c.dom.Document
53 import org.w3c.dom.Element
54 import org.w3c.dom.NamedNodeMap
55 import org.w3c.dom.Node
56 import org.w3c.dom.NodeList;
57 import org.xml.sax.InputSource
58 import org.onap.aai.domain.yang.VpnBinding
59 import org.onap.aai.domain.yang.L3Network
60 import org.onap.aai.domain.yang.NetworkPolicy
61 import org.onap.aai.domain.yang.RouteTableReference
62 import org.onap.aai.domain.yang.RouteTarget
63 import org.onap.aai.domain.yang.Subnet
64 import javax.ws.rs.NotFoundException
67 import groovy.xml.XmlUtil
70 * This groovy class supports the <class>DoUpdateNetworkInstance.bpmn</class> process.
73 public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor {
74 private static final Logger logger = LoggerFactory.getLogger( DoUpdateNetworkInstance.class);
76 String Prefix="UPDNETI_"
77 ExceptionUtil exceptionUtil = new ExceptionUtil()
78 JsonUtils jsonUtil = new JsonUtils()
79 VidUtils vidUtils = new VidUtils(this)
80 NetworkUtils networkUtils = new NetworkUtils()
81 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
84 * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
87 public InitializeProcessVariables(DelegateExecution execution){
88 /* Initialize all the process variables in this block */
90 execution.setVariable(Prefix + "messageId", "")
91 execution.setVariable("BasicAuthHeaderValuePO", "")
92 execution.setVariable("BasicAuthHeaderValueSDNC", "")
93 execution.setVariable(Prefix + "networkRequest", "")
94 execution.setVariable(Prefix + "networkInputs", "")
95 execution.setVariable(Prefix + "networkOutputs", "")
96 execution.setVariable(Prefix + "requestId", "")
97 execution.setVariable(Prefix + "source", "")
98 execution.setVariable(Prefix + "networkId", "")
100 execution.setVariable(Prefix + "isPONR", false) // Point-of-no-return, means, rollback is not needed
102 // AAI query Cloud Region
103 execution.setVariable(Prefix + "queryCloudRegionRequest","")
104 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
105 execution.setVariable(Prefix + "queryCloudRegionResponse","")
106 execution.setVariable(Prefix + "cloudRegionPo","")
107 execution.setVariable(Prefix + "cloudRegionSdnc","")
108 execution.setVariable(Prefix + "isCloudRegionGood", false)
111 execution.setVariable(Prefix + "queryIdAAIRequest","")
112 execution.setVariable(Prefix + "queryIdAAIResponse", "")
113 execution.setVariable(Prefix + "aaiIdReturnCode", "")
115 // AAI query vpn binding
116 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
117 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
118 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
119 execution.setVariable(Prefix + "vpnBindings", null)
120 execution.setVariable(Prefix + "vpnCount", 0)
121 execution.setVariable(Prefix + "routeCollection", "")
123 // AAI query network policy
124 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
125 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
126 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
127 execution.setVariable(Prefix + "networkPolicyUriList", null)
128 execution.setVariable(Prefix + "networkPolicyCount", 0)
129 execution.setVariable(Prefix + "networkCollection", "")
131 // AAI query route table reference
132 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
133 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
134 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
135 execution.setVariable(Prefix + "networkTableRefUriList", null)
136 execution.setVariable(Prefix + "networkTableRefCount", 0)
137 execution.setVariable(Prefix + "tableRefCollection", "")
140 execution.setVariable(Prefix + "requeryIdAAIRequest","")
141 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
142 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
144 // AAI update contrail
145 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
146 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
147 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
148 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
150 execution.setVariable(Prefix + "updateNetworkRequest", "")
151 execution.setVariable(Prefix + "updateNetworkResponse", "")
152 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
153 execution.setVariable(Prefix + "networkReturnCode", "")
154 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
156 execution.setVariable(Prefix + "changeAssignSDNCRequest", "")
157 execution.setVariable(Prefix + "changeAssignSDNCResponse", "")
158 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
159 execution.setVariable(Prefix + "sdncReturnCode", "")
160 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
161 execution.setVariable(Prefix + "sdncResponseSuccess", false)
163 execution.setVariable(Prefix + "isVnfBindingPresent", false)
164 execution.setVariable(Prefix + "Success", false)
165 execution.setVariable(Prefix + "serviceInstanceId", "")
167 execution.setVariable(Prefix + "isException", false)
171 // **************************************************
172 // Pre or Prepare Request Section
173 // **************************************************
175 * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
178 public void preProcessRequest (DelegateExecution execution) {
180 execution.setVariable("prefix",Prefix)
182 logger.trace("Inside preProcessRequest DoUpdateNetworkInstance Request ")
185 // initialize flow variables
186 InitializeProcessVariables(execution)
188 // GET Incoming request & validate 3 kinds of format.
189 execution.setVariable("action", "UPDATE")
190 String networkRequest = execution.getVariable("bpmnRequest")
191 if (networkRequest != null) {
192 if (networkRequest.contains("requestDetails")) {
193 // JSON format request is sent, create xml
195 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
196 logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
197 networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
199 } catch (Exception ex) {
200 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
201 logger.debug(dataErrorMessage)
202 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
205 // XML format request is sent
209 // vIPR format request is sent, create xml from individual variables
210 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
213 networkRequest = utils.formatXml(networkRequest)
214 logger.debug(networkRequest)
215 execution.setVariable(Prefix + "networkRequest", networkRequest)
216 logger.debug(" network-request - " + '\n' + networkRequest)
218 // validate 'disableRollback' (aka, 'suppressRollback')
219 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
220 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
221 logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
223 String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
224 execution.setVariable(Prefix + "networkInputs", networkInputs)
225 logger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
228 String messageId = execution.getVariable(Prefix + "messageId") // for testing
229 if (messageId == null || messageId == "") {
230 messageId = UUID.randomUUID()
231 logger.debug(" UPDNETI_messageId, random generated: " + messageId)
233 logger.debug(" UPDNETI_messageId, pre-assigned: " + messageId)
235 execution.setVariable(Prefix + "messageId", messageId)
237 String source = utils.getNodeText(networkRequest, "source")
238 execution.setVariable(Prefix + "source", source)
239 logger.debug(Prefix + "source - " + source)
241 String networkId = ""
242 if (utils.nodeExists(networkRequest, "network-id")) {
243 networkId = utils.getNodeText(networkRequest, "network-id")
244 if (networkId == 'null' || networkId == "") {
245 sendSyncError(execution)
246 // missing value of networkId
247 String dataErrorMessage = "Variable 'network-id' value/element is missing."
248 logger.debug(" Invalid Request - " + dataErrorMessage)
249 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
254 String lcpCloudRegion = ""
255 if (utils.nodeExists(networkRequest, "aic-cloud-region")) {
256 lcpCloudRegion = utils.getNodeText(networkRequest, "aic-cloud-region")
257 if ((lcpCloudRegion == 'null') || (lcpCloudRegion == "")) {
258 sendSyncError(execution)
259 String dataErrorMessage = "requestDetails has missing 'aic-cloud-region' value/element."
260 logger.debug(" Invalid Request - " + dataErrorMessage)
261 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
265 String serviceInstanceId = ""
266 if (utils.nodeExists(networkRequest, "service-instance-id")) {
267 serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
268 if ((serviceInstanceId == 'null') || (lcpCloudRegion == "")) {
269 sendSyncError(execution)
270 String dataErrorMessage = "Variable 'serviceInstanceId' value/element is missing."
271 logger.debug(" Invalid Request - " + dataErrorMessage)
272 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
276 // PO Authorization Info / headers Authorization=
277 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
281 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
282 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
283 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
285 } catch (IOException ex) {
286 String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - "
287 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
288 logger.debug(dataErrorMessage)
289 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
292 // Set variables for Generic Get Sub Flow use
293 execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
294 logger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
296 logger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
298 String sdncVersion = execution.getVariable("sdncVersion")
299 logger.debug("sdncVersion? : " + sdncVersion)
301 // build 'networkOutputs'
302 networkId = utils.getNodeText(networkRequest, "network-id")
303 if ((networkId == null) || (networkId == "null")) {
306 String networkName = utils.getNodeText(networkRequest, "network-name")
307 if ((networkName == null) || (networkName == "null")) {
310 String networkOutputs =
312 <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
313 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
314 </network-outputs>"""
315 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
316 logger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
317 execution.setVariable(Prefix + "networkId", networkId)
318 execution.setVariable(Prefix + "networkName", networkName)
321 } catch (BpmnError e) {
324 } catch (Exception ex){
325 sendSyncError(execution)
327 String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - " + ex.getMessage()
328 logger.debug(exceptionMessage)
329 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
335 * Gets the service instance uri from aai
338 public void getServiceInstance(DelegateExecution execution) {
339 logger.trace("getServiceInstance ")
341 String serviceInstanceId = execution.getVariable('serviceInstanceId')
343 AAIResourcesClient resourceClient = new AAIResourcesClient()
344 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
346 if(!resourceClient.exists(uri)){
347 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Service Instance not found in aai")
349 Map<String, String> keys = uri.getURIKeys()
350 execution.setVariable("serviceType", keys.get("service-type"))
351 execution.setVariable("subscriberName", keys.get("global-customer-id"))
354 }catch(BpmnError e) {
356 }catch (Exception ex){
357 String msg = "Exception in getServiceInstance. " + ex.getMessage()
359 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
363 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
365 execution.setVariable("prefix", Prefix)
367 logger.debug(" ***** Inside callRESTQueryAAICloudRegion of DoUpdateNetworkInstance ***** " )
370 String networkInputs = execution.getVariable(Prefix + "networkInputs")
371 String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
374 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
375 AaiUtil aaiUtil = new AaiUtil(this)
377 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
378 def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
380 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
382 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
383 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
385 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
386 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
387 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
388 execution.setVariable(Prefix + "isCloudRegionGood", true)
391 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
392 logger.debug(dataErrorMessage)
393 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
397 logger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
399 } catch (BpmnError e) {
402 } catch (Exception ex) {
404 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
405 logger.debug(exceptionMessage)
406 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
412 public void callRESTQueryAAINetworkId(DelegateExecution execution) {
414 execution.setVariable("prefix", Prefix)
416 logger.debug(" ***** Inside callRESTQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
420 String networkRequest = execution.getVariable(Prefix + "networkRequest")
421 String networkId = utils.getNodeText(networkRequest, "network-id")
422 execution.setVariable(Prefix + "networkId", networkId)
424 AAIResourcesClient client = new AAIResourcesClient()
425 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
426 AAIResultWrapper network = client.get(uri, NotFoundException.class)
428 execution.setVariable(Prefix + "aaiIdReturnCode", "200")
430 execution.setVariable(Prefix + "queryIdAAIResponse", network)
433 } catch (NotFoundException e) {
434 String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
435 logger.debug(" AAI Query Failed. " + dataErrorMessage)
436 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
437 } catch (Exception ex) {
438 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
439 logger.debug(exceptionMessage)
440 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
446 public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
448 execution.setVariable("prefix", Prefix)
450 logger.debug(" ***** Inside callRESTReQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
454 String networkRequest = execution.getVariable(Prefix + "networkRequest")
455 String networkId = utils.getNodeText(networkRequest, "network-id")
457 AAIResourcesClient client = new AAIResourcesClient()
458 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
459 AAIResultWrapper network = client.get(uri, NotFoundException.class)
461 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
462 execution.setVariable(Prefix + "requeryIdAAIResponse", network)
464 L3Network net = network.asBean(L3Network.class).get()
465 String netId = net.getNetworkId()
466 String netName = net.getNetworkName()
467 String networkOutputs =
469 <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
470 <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
471 </network-outputs>"""
472 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
473 logger.debug(" networkOutputs - " + '\n' + networkOutputs)
475 } catch (NotFoundException e) {
476 String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
477 logger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
478 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
479 } catch (Exception ex) {
480 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
481 logger.debug(exceptionMessage)
482 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
488 public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
490 execution.setVariable("prefix", Prefix)
492 logger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding of DoUpdateNetworkInstance ***** " )
497 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
498 if(queryIdAAIResponse.getRelationships().isPresent()){
499 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
501 logger.debug(Prefix + "vpnCount - " + uris.size())
503 if (uris.size() > 0) {
504 String routeTargets = ""
505 for(AAIResourceUri u : uris) {
507 AAIResourcesClient client = new AAIResourcesClient()
508 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
509 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
511 String routeTarget = ""
512 String routeRole = ""
513 if(binding.get().getRouteTargets() != null) {
514 List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
515 for(RouteTarget target : targets) {
516 routeTarget = target.getGlobalRouteTarget()
517 routeRole = target.getRouteTargetRole()
518 routeTargets += "<routeTargets>" + '\n' +
519 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
520 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
521 "</routeTargets>" + '\n'
527 execution.setVariable(Prefix + "routeCollection", routeTargets)
528 logger.debug(" UPDNETI_routeCollection - " + '\n' + routeTargets)
531 // reset return code to success
532 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
533 AaiUtil aaiUriUtil = new AaiUtil(this)
534 String schemaVersion = aaiUriUtil.getNamespace()
535 String aaiStubResponse =
536 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
537 <vpn-binding xmlns="${schemaVersion}">
538 <global-route-target/>
541 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
542 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
543 execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
544 logger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
549 } catch (NotFoundException e) {
550 logger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
551 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
552 } catch (Exception ex) {
553 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
554 logger.debug(exceptionMessage)
555 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
561 public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
563 execution.setVariable("prefix", Prefix)
565 logger.debug(" ***** Inside callRESTQueryAAINetworkPolicy of DoUpdateNetworkInstance ***** " )
569 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
570 if(queryIdAAIResponse.getRelationships().isPresent()){
571 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
573 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
574 logger.debug(Prefix + "networkPolicyCount - " + uris.size())
576 if (uris.size() > 0) {
578 String networkPolicies = ""
579 // AII loop call using list vpnBindings
580 for(AAIResourceUri u : uris) {
582 AAIResourcesClient client = new AAIResourcesClient()
583 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
585 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
587 String networkPolicy = p.getNetworkPolicyFqdn()
588 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
592 execution.setVariable(Prefix + "networkCollection", networkPolicies)
593 logger.debug(" UPDNETI_networkCollection - " + '\n' + networkPolicies)
596 // reset return code to success
597 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
598 AaiUtil aaiUriUtil = new AaiUtil(this)
599 String schemaVersion = aaiUriUtil.getNamespace()
600 String aaiStubResponse =
601 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
602 <network-policy xmlns="${schemaVersion}">
603 <network-policy-fqdn/>
606 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
607 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
608 execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
609 logger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
614 } catch (NotFoundException e) {
615 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
616 logger.debug(dataErrorMessage)
617 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
618 } catch (Exception ex) {
619 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
620 logger.debug(exceptionMessage)
621 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
627 public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
629 execution.setVariable("prefix", Prefix)
631 logger.debug(" ***** Inside callRESTQueryAAINetworkTableRef of DoUpdateNetworkInstance ***** " )
634 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
635 if(queryIdAAIResponse.getRelationships().isPresent()){
636 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
638 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
639 logger.debug(Prefix + "networkTableRefCount - " + uris.size())
641 logger.debug(" UPDNETI_networkTableRefCount - " + uris.size())
642 if (uris.size() > 0) {
644 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
646 // AII loop call using list vpnBindings
647 String networkTableRefs = ""
648 for(AAIResourceUri u : uris) {
650 AAIResourcesClient client = new AAIResourcesClient()
651 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
653 String networkTableRef = rt.getRouteTableReferenceFqdn()
654 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
658 execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
659 logger.debug(" UPDNETI_tableRefCollection - " + '\n' + networkTableRefs)
662 // reset return code to success
663 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
664 AaiUtil aaiUriUtil = new AaiUtil(this)
665 String schemaVersion = aaiUriUtil.getNamespace()
666 String aaiStubResponse =
667 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
668 <route-table-references xmlns="${schemaVersion}">
669 <route-table-reference-fqdn/>
670 </route-table-references>
672 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
673 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
674 execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
675 logger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
680 } catch (NotFoundException e) {
681 String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
682 logger.debug(dataErrorMessage)
683 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
685 } catch (Exception ex) {
686 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
687 logger.debug(exceptionMessage)
688 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
694 public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
695 execution.setVariable("prefix", Prefix)
696 logger.debug(" ***** Inside callRESTUpdateContrailAAINetwork of DoUpdateNetworkInstance ***** " )
699 String networkRequest = execution.getVariable(Prefix + "networkRequest")
700 String networkId = utils.getNodeText(networkRequest, "network-id")
701 AAIResultWrapper requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
702 String updateNetworkResponse = execution.getVariable(Prefix + "updateNetworkResponse")
704 L3Network oldL3Network = requeryIdAAIResponse.asBean(L3Network.class).get()
705 L3Network l3Network = new L3Network()
706 if (oldL3Network.getHeatStackId() != null) {
708 if (utils.nodeExists(updateNetworkResponse, 'networkStackId')) {
709 l3Network.setHeatStackId(utils.getNodeText(updateNetworkResponse, 'networkStackId'))
712 if (oldL3Network.getNeutronNetworkId() != null) {
714 if (utils.nodeExists(updateNetworkResponse, 'neutronNetworkId')) {
715 l3Network.setNeutronNetworkId(utils.getNodeText(updateNetworkResponse, 'neutronNetworkId'))
718 if (oldL3Network.getContrailNetworkFqdn() != null) {
720 if (utils.nodeExists(updateNetworkResponse, 'networkFqdn')) {
721 l3Network.setContrailNetworkFqdn(utils.getNodeText(updateNetworkResponse, 'networkFqdn'))
725 String status = utils.getNodeText(updateNetworkResponse, 'orchestration-status')
726 if(status.equals("pending-create") || status.equals("PendingCreate")){
727 l3Network.setOrchestrationStatus("Created")
729 l3Network.setOrchestrationStatus("Active")
732 AAIResourcesClient client = new AAIResourcesClient()
733 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
734 client.update(uri, l3Network)
736 List<Subnet> subnets = oldL3Network.getSubnets().getSubnet()
737 for(Subnet s:subnets){
738 String subnetOrchStatus = s.getOrchestrationStatus()
739 String subnetId = s.getSubnetId()
741 Subnet subnet = new Subnet()
742 String neutronSubnetId = networkUtils.extractNeutSubId(updateNetworkResponse, subnetId)
743 subnet.setNeutronSubnetId(neutronSubnetId)
744 if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
745 subnet.setOrchestrationStatus("Created")
747 subnet.setOrchestrationStatus("Active")
750 AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
751 client.update(subUri, subnet)
754 execution.setVariable(Prefix + "isPONR", true)
756 } catch (BpmnError e) {
758 } catch (NotFoundException e) {
759 String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
760 logger.debug(dataErrorMessage)
761 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
762 } catch (Exception ex) {
763 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
764 logger.debug(exceptionMessage)
765 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
771 public void prepareUpdateNetworkRequest (DelegateExecution execution) {
773 execution.setVariable("prefix", Prefix)
775 logger.trace("Inside prepareUpdateNetworkRequest of DoUpdateNetworkInstance ")
780 String requestId = execution.getVariable(Prefix + "requestId")
781 String messageId = execution.getVariable(Prefix + "messageId")
782 String source = execution.getVariable(Prefix + "source")
784 String requestInput = execution.getVariable(Prefix + "networkRequest")
785 L3Network queryIdResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
786 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
787 String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
789 // Prepare Network request
790 String routeCollection = execution.getVariable(Prefix + "routeCollection")
791 String policyCollection = execution.getVariable(Prefix + "networkCollection")
792 String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
793 String updateNetworkRequest = networkUtils.UpdateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
795 String buildUpdateNetworkRequestAsString = utils.formatXml(updateNetworkRequest)
796 buildUpdateNetworkRequestAsString = buildUpdateNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
797 logger.debug(buildUpdateNetworkRequestAsString)
799 execution.setVariable(Prefix + "updateNetworkRequest", buildUpdateNetworkRequestAsString)
800 logger.debug(" UPDNETI_updateNetworkRequest - " + "\n" + buildUpdateNetworkRequestAsString)
802 } catch (Exception ex) {
803 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareUpdateNetworkRequest() - " + ex.getMessage()
804 logger.debug(exceptionMessage)
805 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
811 public void prepareSDNCRequest (DelegateExecution execution) {
813 execution.setVariable("prefix", Prefix)
815 logger.trace("Inside prepareSDNCRequest of DoUpdateNetworkInstance ")
819 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
820 String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
821 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
823 String networkId = ""
824 if (utils.nodeExists(updateNetworkInput, "network-id")) {
825 networkId = utils.getNodeText(updateNetworkInput, "network-id")
827 if (networkId == null) {networkId = ""}
829 String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
831 AAIResultWrapper wrapper = execution.getVariable(Prefix + "queryIdAAIResponse")
832 L3Network queryAAIResponse = wrapper.asBean(L3Network.class).get()
834 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
835 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "changeassign", "NetworkActivateRequest", cloudRegionId, networkId, queryAAIResponse, null)
837 String sndcTopologyUpdateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
838 logger.debug(sndcTopologyUpdateRequesAsString)
839 execution.setVariable(Prefix + "changeAssignSDNCRequest", sndcTopologyUpdateRequesAsString)
840 logger.debug(" UPDNETI_changeAssignSDNCRequest - " + "\n" + sndcTopologyUpdateRequesAsString)
843 } catch (Exception ex) {
844 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
845 logger.debug(exceptionMessage)
846 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
852 public void validateSDNCResponse (DelegateExecution execution) {
854 execution.setVariable("prefix", Prefix)
856 logger.trace("Inside validateSDNCResponse of DoUpdateNetworkInstance ")
858 String response = execution.getVariable(Prefix + "changeAssignSDNCResponse")
859 WorkflowException workflowException = null
861 workflowException = execution.getVariable(Prefix + "WorkflowException")
862 //execution.setVariable("WorkflowException", workflowException)
863 } catch (Exception ex) {
864 logger.debug(" Sdnc 'WorkflowException' object is empty or null. ")
867 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
869 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
870 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
872 String changeAssignSDNCResponseDecodeXml = execution.getVariable(Prefix + "changeAssignSDNCResponse")
873 changeAssignSDNCResponseDecodeXml = changeAssignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
874 execution.setVariable(Prefix + "changeAssignSDNCResponse", changeAssignSDNCResponseDecodeXml)
876 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, prefix+'sdncResponseSuccess'
877 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
878 logger.debug("Successfully Validated SDNC Response")
881 logger.debug("Did NOT Successfully Validated SDNC Response")
882 throw new BpmnError("MSOWorkflowException")
888 public void postProcessResponse (DelegateExecution execution) {
890 execution.setVariable("prefix", Prefix)
892 logger.trace("Inside postProcessResponse of DoUpdateNetworkInstance ")
895 logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
896 if (execution.getVariable(Prefix + "isException") == false) {
898 execution.setVariable("orchestrationStatus", "")
899 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
900 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
901 prepareSuccessRollbackData(execution) // populate rollbackData
902 execution.setVariable("WorkflowException", null)
903 execution.setVariable(Prefix + "Success", true)
904 logger.debug(" ***** postProcessResponse(), GOOD !!!")
906 execution.setVariable(Prefix + "Success", false)
907 execution.setVariable("rollbackData", null)
908 String exceptionMessage = " Exception encountered in MSO Bpmn. "
909 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
910 logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
911 WorkflowException wfex = execution.getVariable("workflowException")
912 exceptionMessage = wfex.getErrorMessage()
914 if (execution.getVariable(Prefix + "WorkflowException") != null) {
915 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
916 exceptionMessage = pwfex.getErrorMessage()
919 // going to the Main flow: a-la-carte or macro
920 logger.debug(" ***** postProcessResponse(), BAD !!!")
921 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
922 throw new BpmnError("MSOWorkflowException")
925 } catch(BpmnError b){
926 logger.debug("Rethrowing MSOWorkflowException")
930 } catch (Exception ex) {
931 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
932 logger.debug(exceptionMessage)
933 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
940 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
942 execution.setVariable("prefix", Prefix)
944 logger.trace("Inside prepareSDNCRollbackRequest of DoUpdateNetworkInstance ")
947 // for some reason the WorkflowException object is null after the sdnc rollback call task, need to save WorkflowException.
948 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
950 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
951 String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
952 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
953 String changeAssignSDNCResponse = execution.getVariable(Prefix + "changeAssignSDNCResponse")
954 String networkId = utils.getNodeText(changeAssignSDNCResponse, "network-id")
956 String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
958 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
959 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
960 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
961 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
962 logger.debug(" Preparing request for SDNC Topology assign's rollback/compensation . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
964 } catch (Exception ex) {
965 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
966 logger.debug(exceptionMessage)
967 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
973 public void prepareRollbackData(DelegateExecution execution) {
975 execution.setVariable("prefix",Prefix)
977 logger.trace("Inside prepareRollbackData() of DoUpdateNetworkInstance ")
981 Map<String, String> rollbackData = new HashMap<String, String>();
982 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
983 if (rollbackSDNCRequest != null) {
984 if (rollbackSDNCRequest != "") {
985 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
988 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
989 if (rollbackNetworkRequest != null) {
990 if (rollbackNetworkRequest != "") {
991 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
994 execution.setVariable("rollbackData", rollbackData)
995 logger.debug("** rollbackData : " + rollbackData)
997 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
998 logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
1000 } catch (Exception ex) {
1001 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
1002 logger.debug(exceptionMessage)
1003 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1009 public void prepareSuccessRollbackData(DelegateExecution execution) {
1011 execution.setVariable("prefix",Prefix)
1013 logger.trace("Inside prepareSuccessRollbackData() of DoUpdateNetworkInstance ")
1017 if (execution.getVariable("sdncVersion") != '1610') {
1018 // skip: 1702 for 'changeassign' or equivalent not yet defined in SNDC, so no rollback.
1020 prepareSDNCRollbackRequest(execution)
1023 Map<String, String> rollbackData = new HashMap<String, String>();
1024 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1025 if (rollbackSDNCRequest != null) {
1026 if (rollbackSDNCRequest != "") {
1027 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1030 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1031 if (rollbackNetworkRequest != null) {
1032 if (rollbackNetworkRequest != "") {
1033 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1036 execution.setVariable("rollbackData", rollbackData)
1038 logger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1039 execution.setVariable("WorkflowException", null)
1042 } catch (Exception ex) {
1043 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1044 logger.debug(exceptionMessage)
1045 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1051 public void setExceptionFlag(DelegateExecution execution){
1053 execution.setVariable("prefix",Prefix)
1055 logger.trace("Inside setExceptionFlag() of DoUpdateNetworkInstance ")
1059 execution.setVariable(Prefix + "isException", true)
1061 if (execution.getVariable("SavedWorkflowException1") != null) {
1062 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1064 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1066 logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1068 } catch(Exception ex){
1069 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1070 logger.debug(exceptionMessage)
1071 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1077 // *******************************
1078 // Build Error Section
1079 // *******************************
1081 public void processJavaException(DelegateExecution execution){
1083 execution.setVariable("prefix",Prefix)
1085 logger.debug("Caught a Java Exception")
1086 logger.debug("Started processJavaException Method")
1087 logger.debug("Variables List: " + execution.getVariables())
1088 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1089 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1091 }catch(Exception e){
1092 logger.debug("Caught Exception during processJavaException Method: " + e)
1093 execution.setVariable("UnexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated
1094 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
1096 logger.debug("Completed processJavaException Method")