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.NotFoundException
26 import org.camunda.bpm.engine.delegate.BpmnError
27 import org.camunda.bpm.engine.delegate.DelegateExecution
28 import org.onap.aai.domain.yang.L3Network
29 import org.onap.aai.domain.yang.NetworkPolicy
30 import org.onap.aai.domain.yang.RouteTableReference
31 import org.onap.aai.domain.yang.RouteTarget
32 import org.onap.aai.domain.yang.Subnet
33 import org.onap.aai.domain.yang.VpnBinding
34 import org.onap.aaiclient.client.aai.AAIObjectType
35 import org.onap.aaiclient.client.aai.AAIResourcesClient
36 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
37 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
38 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
39 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
40 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types
41 import org.onap.aaiclient.client.graphinventory.entities.uri.Depth
42 import org.onap.so.bpmn.common.scripts.AaiUtil
43 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
44 import org.onap.so.bpmn.common.scripts.ExceptionUtil
45 import org.onap.so.bpmn.common.scripts.MsoUtils
46 import org.onap.so.bpmn.common.scripts.NetworkUtils
47 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
48 import org.onap.so.bpmn.common.scripts.VidUtils
49 import org.onap.so.bpmn.core.UrnPropertiesReader
50 import org.onap.so.bpmn.core.WorkflowException
51 import org.onap.so.bpmn.core.json.JsonUtils
52 import org.onap.so.constants.Defaults
53 import org.slf4j.Logger
54 import org.slf4j.LoggerFactory
58 * This groovy class supports the <class>DoUpdateNetworkInstance.bpmn</class> process.
61 public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor {
62 private static final Logger logger = LoggerFactory.getLogger( DoUpdateNetworkInstance.class);
64 String Prefix="UPDNETI_"
65 ExceptionUtil exceptionUtil = new ExceptionUtil()
66 JsonUtils jsonUtil = new JsonUtils()
67 VidUtils vidUtils = new VidUtils(this)
68 NetworkUtils networkUtils = new NetworkUtils()
69 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
72 * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
75 public InitializeProcessVariables(DelegateExecution execution){
76 /* Initialize all the process variables in this block */
78 execution.setVariable(Prefix + "messageId", "")
79 execution.setVariable("BasicAuthHeaderValuePO", "")
80 execution.setVariable("BasicAuthHeaderValueSDNC", "")
81 execution.setVariable(Prefix + "networkRequest", "")
82 execution.setVariable(Prefix + "networkInputs", "")
83 execution.setVariable(Prefix + "networkOutputs", "")
84 execution.setVariable(Prefix + "requestId", "")
85 execution.setVariable(Prefix + "source", "")
86 execution.setVariable(Prefix + "networkId", "")
88 execution.setVariable(Prefix + "isPONR", false) // Point-of-no-return, means, rollback is not needed
90 // AAI query Cloud Region
91 execution.setVariable(Prefix + "queryCloudRegionRequest","")
92 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
93 execution.setVariable(Prefix + "queryCloudRegionResponse","")
94 execution.setVariable(Prefix + "cloudRegionPo","")
95 execution.setVariable(Prefix + "cloudRegionSdnc","")
96 execution.setVariable(Prefix + "isCloudRegionGood", false)
99 execution.setVariable(Prefix + "queryIdAAIRequest","")
100 execution.setVariable(Prefix + "queryIdAAIResponse", "")
101 execution.setVariable(Prefix + "aaiIdReturnCode", "")
103 // AAI query vpn binding
104 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
105 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
106 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
107 execution.setVariable(Prefix + "vpnBindings", null)
108 execution.setVariable(Prefix + "vpnCount", 0)
109 execution.setVariable(Prefix + "routeCollection", "")
111 // AAI query network policy
112 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
113 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
114 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
115 execution.setVariable(Prefix + "networkPolicyUriList", null)
116 execution.setVariable(Prefix + "networkPolicyCount", 0)
117 execution.setVariable(Prefix + "networkCollection", "")
119 // AAI query route table reference
120 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
121 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
122 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
123 execution.setVariable(Prefix + "networkTableRefUriList", null)
124 execution.setVariable(Prefix + "networkTableRefCount", 0)
125 execution.setVariable(Prefix + "tableRefCollection", "")
128 execution.setVariable(Prefix + "requeryIdAAIRequest","")
129 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
130 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
132 // AAI update contrail
133 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
134 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
135 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
136 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
138 execution.setVariable(Prefix + "updateNetworkRequest", "")
139 execution.setVariable(Prefix + "updateNetworkResponse", "")
140 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
141 execution.setVariable(Prefix + "networkReturnCode", "")
142 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
144 execution.setVariable(Prefix + "changeAssignSDNCRequest", "")
145 execution.setVariable(Prefix + "changeAssignSDNCResponse", "")
146 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
147 execution.setVariable(Prefix + "sdncReturnCode", "")
148 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
149 execution.setVariable(Prefix + "sdncResponseSuccess", false)
151 execution.setVariable(Prefix + "isVnfBindingPresent", false)
152 execution.setVariable(Prefix + "Success", false)
153 execution.setVariable(Prefix + "serviceInstanceId", "")
155 execution.setVariable(Prefix + "isException", false)
159 // **************************************************
160 // Pre or Prepare Request Section
161 // **************************************************
163 * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
166 public void preProcessRequest (DelegateExecution execution) {
168 execution.setVariable("prefix",Prefix)
170 logger.trace("Inside preProcessRequest DoUpdateNetworkInstance Request ")
173 // initialize flow variables
174 InitializeProcessVariables(execution)
176 // GET Incoming request & validate 3 kinds of format.
177 execution.setVariable("action", "UPDATE")
178 String networkRequest = execution.getVariable("bpmnRequest")
179 if (networkRequest != null) {
180 if (networkRequest.contains("requestDetails")) {
181 // JSON format request is sent, create xml
183 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
184 logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
185 networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
187 } catch (Exception ex) {
188 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
189 logger.debug(dataErrorMessage)
190 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
193 // XML format request is sent
197 // vIPR format request is sent, create xml from individual variables
198 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
201 networkRequest = utils.formatXml(networkRequest)
202 logger.debug(networkRequest)
203 execution.setVariable(Prefix + "networkRequest", networkRequest)
204 logger.debug(" network-request - " + '\n' + networkRequest)
206 // validate 'disableRollback' (aka, 'suppressRollback')
207 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
208 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
209 logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
211 String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
212 execution.setVariable(Prefix + "networkInputs", networkInputs)
213 logger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
216 String messageId = execution.getVariable(Prefix + "messageId") // for testing
217 if (messageId == null || messageId == "") {
218 messageId = UUID.randomUUID()
219 logger.debug(" UPDNETI_messageId, random generated: " + messageId)
221 logger.debug(" UPDNETI_messageId, pre-assigned: " + messageId)
223 execution.setVariable(Prefix + "messageId", messageId)
225 String source = utils.getNodeText(networkRequest, "source")
226 execution.setVariable(Prefix + "source", source)
227 logger.debug(Prefix + "source - " + source)
229 String networkId = ""
230 if (utils.nodeExists(networkRequest, "network-id")) {
231 networkId = utils.getNodeText(networkRequest, "network-id")
232 if (networkId == 'null' || networkId == "") {
233 sendSyncError(execution)
234 // missing value of networkId
235 String dataErrorMessage = "Variable 'network-id' value/element is missing."
236 logger.debug(" Invalid Request - " + dataErrorMessage)
237 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
242 String lcpCloudRegion = ""
243 if (utils.nodeExists(networkRequest, "aic-cloud-region")) {
244 lcpCloudRegion = utils.getNodeText(networkRequest, "aic-cloud-region")
245 if ((lcpCloudRegion == 'null') || (lcpCloudRegion == "")) {
246 sendSyncError(execution)
247 String dataErrorMessage = "requestDetails has missing 'aic-cloud-region' value/element."
248 logger.debug(" Invalid Request - " + dataErrorMessage)
249 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
253 String serviceInstanceId = ""
254 if (utils.nodeExists(networkRequest, "service-instance-id")) {
255 serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
256 if ((serviceInstanceId == 'null') || (lcpCloudRegion == "")) {
257 sendSyncError(execution)
258 String dataErrorMessage = "Variable 'serviceInstanceId' value/element is missing."
259 logger.debug(" Invalid Request - " + dataErrorMessage)
260 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
264 // PO Authorization Info / headers Authorization=
265 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
269 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
270 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
271 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
273 } catch (IOException ex) {
274 String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - "
275 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
276 logger.debug(dataErrorMessage)
277 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
280 // Set variables for Generic Get Sub Flow use
281 execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
282 logger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
284 logger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
286 String sdncVersion = execution.getVariable("sdncVersion")
287 logger.debug("sdncVersion? : " + sdncVersion)
289 // build 'networkOutputs'
290 networkId = utils.getNodeText(networkRequest, "network-id")
291 if ((networkId == null) || (networkId == "null")) {
294 String networkName = utils.getNodeText(networkRequest, "network-name")
295 if ((networkName == null) || (networkName == "null")) {
298 String networkOutputs =
300 <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
301 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
302 </network-outputs>"""
303 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
304 logger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
305 execution.setVariable(Prefix + "networkId", networkId)
306 execution.setVariable(Prefix + "networkName", networkName)
309 } catch (BpmnError e) {
312 } catch (Exception ex){
313 sendSyncError(execution)
315 String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - " + ex.getMessage()
316 logger.debug(exceptionMessage)
317 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
323 * Gets the service instance uri from aai
326 public void getServiceInstance(DelegateExecution execution) {
327 logger.trace("getServiceInstance ")
329 String serviceInstanceId = execution.getVariable('serviceInstanceId')
331 AAIResourcesClient resourceClient = new AAIResourcesClient()
332 AAIResourceUri uri = AAIUriFactory.createResourceUri(Types.SERVICE_INSTANCE.getFragment(serviceInstanceId))
334 if(!resourceClient.exists(uri)){
335 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Service Instance not found in aai")
337 Map<String, String> keys = uri.getURIKeys()
338 execution.setVariable("serviceType", keys.get(AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType))
339 execution.setVariable("subscriberName", keys.get(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId))
342 }catch(BpmnError e) {
344 }catch (Exception ex){
345 String msg = "Exception in getServiceInstance. " + ex.getMessage()
347 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
351 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
353 execution.setVariable("prefix", Prefix)
355 logger.debug(" ***** Inside callRESTQueryAAICloudRegion of DoUpdateNetworkInstance ***** " )
358 String networkInputs = execution.getVariable(Prefix + "networkInputs")
359 String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
362 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
363 AaiUtil aaiUtil = new AaiUtil(this)
365 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.cloudInfrastructure().cloudRegion(Defaults.CLOUD_OWNER.toString(), cloudRegion))
366 def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
368 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
370 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
371 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
373 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
374 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
375 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
376 execution.setVariable(Prefix + "isCloudRegionGood", true)
379 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
380 logger.debug(dataErrorMessage)
381 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
385 logger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
387 } catch (BpmnError e) {
390 } catch (Exception ex) {
392 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
393 logger.debug(exceptionMessage)
394 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
400 public void callRESTQueryAAINetworkId(DelegateExecution execution) {
402 execution.setVariable("prefix", Prefix)
404 logger.debug(" ***** Inside callRESTQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
408 String networkRequest = execution.getVariable(Prefix + "networkRequest")
409 String networkId = utils.getNodeText(networkRequest, "network-id")
410 execution.setVariable(Prefix + "networkId", networkId)
412 AAIResourcesClient client = new AAIResourcesClient()
413 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(networkId)).depth(Depth.ONE)
414 AAIResultWrapper network = client.get(uri, NotFoundException.class)
416 execution.setVariable(Prefix + "aaiIdReturnCode", "200")
418 execution.setVariable(Prefix + "queryIdAAIResponse", network)
421 } catch (NotFoundException e) {
422 String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
423 logger.debug(" AAI Query Failed. " + dataErrorMessage)
424 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
425 } catch (Exception ex) {
426 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
427 logger.debug(exceptionMessage)
428 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
434 public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
436 execution.setVariable("prefix", Prefix)
438 logger.debug(" ***** Inside callRESTReQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
442 String networkRequest = execution.getVariable(Prefix + "networkRequest")
443 String networkId = utils.getNodeText(networkRequest, "network-id")
445 AAIResourcesClient client = new AAIResourcesClient()
446 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(networkId)).depth(Depth.ONE)
447 AAIResultWrapper network = client.get(uri, NotFoundException.class)
449 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
450 execution.setVariable(Prefix + "requeryIdAAIResponse", network)
452 L3Network net = network.asBean(L3Network.class).get()
453 String netId = net.getNetworkId()
454 String netName = net.getNetworkName()
455 String networkOutputs =
457 <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
458 <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
459 </network-outputs>"""
460 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
461 logger.debug(" networkOutputs - " + '\n' + networkOutputs)
463 } catch (NotFoundException e) {
464 String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
465 logger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
466 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
467 } catch (Exception ex) {
468 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
469 logger.debug(exceptionMessage)
470 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
476 public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
478 execution.setVariable("prefix", Prefix)
480 logger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding of DoUpdateNetworkInstance ***** " )
485 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
486 if(queryIdAAIResponse.getRelationships().isPresent()){
487 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedUris(Types.VPN_BINDING)
489 logger.debug(Prefix + "vpnCount - " + uris.size())
491 if (uris.size() > 0) {
492 String routeTargets = ""
493 for(AAIResourceUri u : uris) {
495 AAIResourcesClient client = new AAIResourcesClient()
496 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
497 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
499 String routeTarget = ""
500 String routeRole = ""
501 if(binding.get().getRouteTargets() != null) {
502 List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
503 for(RouteTarget target : targets) {
504 routeTarget = target.getGlobalRouteTarget()
505 routeRole = target.getRouteTargetRole()
506 routeTargets += "<routeTargets>" + '\n' +
507 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
508 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
509 "</routeTargets>" + '\n'
515 execution.setVariable(Prefix + "routeCollection", routeTargets)
516 logger.debug(" UPDNETI_routeCollection - " + '\n' + routeTargets)
519 // reset return code to success
520 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
521 AaiUtil aaiUriUtil = new AaiUtil(this)
522 String schemaVersion = aaiUriUtil.getNamespace()
523 String aaiStubResponse =
524 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
525 <vpn-binding xmlns="${schemaVersion}">
526 <global-route-target/>
529 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
530 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
531 execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
532 logger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
537 } catch (NotFoundException e) {
538 logger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
539 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
540 } catch (Exception ex) {
541 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
542 logger.debug(exceptionMessage)
543 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
549 public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
551 execution.setVariable("prefix", Prefix)
553 logger.debug(" ***** Inside callRESTQueryAAINetworkPolicy of DoUpdateNetworkInstance ***** " )
557 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
558 if(queryIdAAIResponse.getRelationships().isPresent()){
559 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedUris(Types.NETWORK_POLICY)
561 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
562 logger.debug(Prefix + "networkPolicyCount - " + uris.size())
564 if (uris.size() > 0) {
566 String networkPolicies = ""
567 // AII loop call using list vpnBindings
568 for(AAIResourceUri u : uris) {
570 AAIResourcesClient client = new AAIResourcesClient()
571 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
573 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
575 String networkPolicy = p.getNetworkPolicyFqdn()
576 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
580 execution.setVariable(Prefix + "networkCollection", networkPolicies)
581 logger.debug(" UPDNETI_networkCollection - " + '\n' + networkPolicies)
584 // reset return code to success
585 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
586 AaiUtil aaiUriUtil = new AaiUtil(this)
587 String schemaVersion = aaiUriUtil.getNamespace()
588 String aaiStubResponse =
589 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
590 <network-policy xmlns="${schemaVersion}">
591 <network-policy-fqdn/>
594 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
595 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
596 execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
597 logger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
602 } catch (NotFoundException e) {
603 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
604 logger.debug(dataErrorMessage)
605 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
606 } catch (Exception ex) {
607 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
608 logger.debug(exceptionMessage)
609 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
615 public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
617 execution.setVariable("prefix", Prefix)
619 logger.debug(" ***** Inside callRESTQueryAAINetworkTableRef of DoUpdateNetworkInstance ***** " )
622 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
623 if(queryIdAAIResponse.getRelationships().isPresent()){
624 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedUris(Types.ROUTE_TABLE_REFERENCE)
626 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
627 logger.debug(Prefix + "networkTableRefCount - " + uris.size())
629 logger.debug(" UPDNETI_networkTableRefCount - " + uris.size())
630 if (uris.size() > 0) {
632 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
634 // AII loop call using list vpnBindings
635 String networkTableRefs = ""
636 for(AAIResourceUri u : uris) {
638 AAIResourcesClient client = new AAIResourcesClient()
639 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
641 String networkTableRef = rt.getRouteTableReferenceFqdn()
642 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
646 execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
647 logger.debug(" UPDNETI_tableRefCollection - " + '\n' + networkTableRefs)
650 // reset return code to success
651 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
652 AaiUtil aaiUriUtil = new AaiUtil(this)
653 String schemaVersion = aaiUriUtil.getNamespace()
654 String aaiStubResponse =
655 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
656 <route-table-references xmlns="${schemaVersion}">
657 <route-table-reference-fqdn/>
658 </route-table-references>
660 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
661 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
662 execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
663 logger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
668 } catch (NotFoundException e) {
669 String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
670 logger.debug(dataErrorMessage)
671 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
673 } catch (Exception ex) {
674 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
675 logger.debug(exceptionMessage)
676 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
682 public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
683 execution.setVariable("prefix", Prefix)
684 logger.debug(" ***** Inside callRESTUpdateContrailAAINetwork of DoUpdateNetworkInstance ***** " )
687 String networkRequest = execution.getVariable(Prefix + "networkRequest")
688 String networkId = utils.getNodeText(networkRequest, "network-id")
689 AAIResultWrapper requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
690 String updateNetworkResponse = execution.getVariable(Prefix + "updateNetworkResponse")
692 L3Network oldL3Network = requeryIdAAIResponse.asBean(L3Network.class).get()
693 L3Network l3Network = new L3Network()
694 if (oldL3Network.getHeatStackId() != null) {
696 if (utils.nodeExists(updateNetworkResponse, 'networkStackId')) {
697 l3Network.setHeatStackId(utils.getNodeText(updateNetworkResponse, 'networkStackId'))
700 if (oldL3Network.getNeutronNetworkId() != null) {
702 if (utils.nodeExists(updateNetworkResponse, 'neutronNetworkId')) {
703 l3Network.setNeutronNetworkId(utils.getNodeText(updateNetworkResponse, 'neutronNetworkId'))
706 if (oldL3Network.getContrailNetworkFqdn() != null) {
708 if (utils.nodeExists(updateNetworkResponse, 'networkFqdn')) {
709 l3Network.setContrailNetworkFqdn(utils.getNodeText(updateNetworkResponse, 'networkFqdn'))
713 String status = utils.getNodeText(updateNetworkResponse, 'orchestration-status')
714 if(status.equals("pending-create") || status.equals("PendingCreate")){
715 l3Network.setOrchestrationStatus("Created")
717 l3Network.setOrchestrationStatus("Active")
720 AAIResourcesClient client = new AAIResourcesClient()
721 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(networkId))
722 client.update(uri, l3Network)
724 List<Subnet> subnets = oldL3Network.getSubnets().getSubnet()
725 for(Subnet s:subnets){
726 String subnetOrchStatus = s.getOrchestrationStatus()
727 String subnetId = s.getSubnetId()
729 Subnet subnet = new Subnet()
730 String neutronSubnetId = networkUtils.extractNeutSubId(updateNetworkResponse, subnetId)
731 subnet.setNeutronSubnetId(neutronSubnetId)
732 if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
733 subnet.setOrchestrationStatus("Created")
735 subnet.setOrchestrationStatus("Active")
738 AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().l3Network(networkId).subnet(subnetId))
739 client.update(subUri, subnet)
742 execution.setVariable(Prefix + "isPONR", true)
744 } catch (BpmnError e) {
746 } catch (NotFoundException e) {
747 String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
748 logger.debug(dataErrorMessage)
749 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
750 } catch (Exception ex) {
751 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
752 logger.debug(exceptionMessage)
753 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
759 public void prepareUpdateNetworkRequest (DelegateExecution execution) {
761 execution.setVariable("prefix", Prefix)
763 logger.trace("Inside prepareUpdateNetworkRequest of DoUpdateNetworkInstance ")
768 String requestId = execution.getVariable(Prefix + "requestId")
769 String messageId = execution.getVariable(Prefix + "messageId")
770 String source = execution.getVariable(Prefix + "source")
772 String requestInput = execution.getVariable(Prefix + "networkRequest")
773 L3Network queryIdResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
774 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
775 String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
777 // Prepare Network request
778 String routeCollection = execution.getVariable(Prefix + "routeCollection")
779 String policyCollection = execution.getVariable(Prefix + "networkCollection")
780 String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
781 String updateNetworkRequest = networkUtils.UpdateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
783 String buildUpdateNetworkRequestAsString = utils.formatXml(updateNetworkRequest)
784 buildUpdateNetworkRequestAsString = buildUpdateNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
785 logger.debug(buildUpdateNetworkRequestAsString)
787 execution.setVariable(Prefix + "updateNetworkRequest", buildUpdateNetworkRequestAsString)
788 logger.debug(" UPDNETI_updateNetworkRequest - " + "\n" + buildUpdateNetworkRequestAsString)
790 } catch (Exception ex) {
791 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareUpdateNetworkRequest() - " + ex.getMessage()
792 logger.debug(exceptionMessage)
793 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
799 public void prepareSDNCRequest (DelegateExecution execution) {
801 execution.setVariable("prefix", Prefix)
803 logger.trace("Inside prepareSDNCRequest of DoUpdateNetworkInstance ")
807 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
808 String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
809 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
811 String networkId = ""
812 if (utils.nodeExists(updateNetworkInput, "network-id")) {
813 networkId = utils.getNodeText(updateNetworkInput, "network-id")
815 if (networkId == null) {networkId = ""}
817 String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
819 AAIResultWrapper wrapper = execution.getVariable(Prefix + "queryIdAAIResponse")
820 L3Network queryAAIResponse = wrapper.asBean(L3Network.class).get()
822 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
823 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "changeassign", "NetworkActivateRequest", cloudRegionId, networkId, queryAAIResponse, null)
825 String sndcTopologyUpdateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
826 logger.debug(sndcTopologyUpdateRequesAsString)
827 execution.setVariable(Prefix + "changeAssignSDNCRequest", sndcTopologyUpdateRequesAsString)
828 logger.debug(" UPDNETI_changeAssignSDNCRequest - " + "\n" + sndcTopologyUpdateRequesAsString)
831 } catch (Exception ex) {
832 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
833 logger.debug(exceptionMessage)
834 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
840 public void validateSDNCResponse (DelegateExecution execution) {
842 execution.setVariable("prefix", Prefix)
844 logger.trace("Inside validateSDNCResponse of DoUpdateNetworkInstance ")
846 String response = execution.getVariable(Prefix + "changeAssignSDNCResponse")
847 WorkflowException workflowException = null
849 workflowException = execution.getVariable(Prefix + "WorkflowException")
850 //execution.setVariable("WorkflowException", workflowException)
851 } catch (Exception ex) {
852 logger.debug(" Sdnc 'WorkflowException' object is empty or null. ")
855 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
857 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
858 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
860 String changeAssignSDNCResponseDecodeXml = execution.getVariable(Prefix + "changeAssignSDNCResponse")
861 changeAssignSDNCResponseDecodeXml = changeAssignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
862 execution.setVariable(Prefix + "changeAssignSDNCResponse", changeAssignSDNCResponseDecodeXml)
864 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, prefix+'sdncResponseSuccess'
865 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
866 logger.debug("Successfully Validated SDNC Response")
869 logger.debug("Did NOT Successfully Validated SDNC Response")
870 throw new BpmnError("MSOWorkflowException")
876 public void postProcessResponse (DelegateExecution execution) {
878 execution.setVariable("prefix", Prefix)
880 logger.trace("Inside postProcessResponse of DoUpdateNetworkInstance ")
883 logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
884 if (execution.getVariable(Prefix + "isException") == false) {
886 execution.setVariable("orchestrationStatus", "")
887 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
888 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
889 prepareSuccessRollbackData(execution) // populate rollbackData
890 execution.setVariable("WorkflowException", null)
891 execution.setVariable(Prefix + "Success", true)
892 logger.debug(" ***** postProcessResponse(), GOOD !!!")
894 execution.setVariable(Prefix + "Success", false)
895 execution.setVariable("rollbackData", null)
896 String exceptionMessage = " Exception encountered in MSO Bpmn. "
897 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
898 logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
899 WorkflowException wfex = execution.getVariable("workflowException")
900 exceptionMessage = wfex.getErrorMessage()
902 if (execution.getVariable(Prefix + "WorkflowException") != null) {
903 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
904 exceptionMessage = pwfex.getErrorMessage()
907 // going to the Main flow: a-la-carte or macro
908 logger.debug(" ***** postProcessResponse(), BAD !!!")
909 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
910 throw new BpmnError("MSOWorkflowException")
913 } catch(BpmnError b){
914 logger.debug("Rethrowing MSOWorkflowException")
918 } catch (Exception ex) {
919 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
920 logger.debug(exceptionMessage)
921 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
928 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
930 execution.setVariable("prefix", Prefix)
932 logger.trace("Inside prepareSDNCRollbackRequest of DoUpdateNetworkInstance ")
935 // for some reason the WorkflowException object is null after the sdnc rollback call task, need to save WorkflowException.
936 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
938 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
939 String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
940 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
941 String changeAssignSDNCResponse = execution.getVariable(Prefix + "changeAssignSDNCResponse")
942 String networkId = utils.getNodeText(changeAssignSDNCResponse, "network-id")
944 String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
946 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
947 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
948 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
949 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
950 logger.debug(" Preparing request for SDNC Topology assign's rollback/compensation . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
952 } catch (Exception ex) {
953 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
954 logger.debug(exceptionMessage)
955 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
961 public void prepareRollbackData(DelegateExecution execution) {
963 execution.setVariable("prefix",Prefix)
965 logger.trace("Inside prepareRollbackData() of DoUpdateNetworkInstance ")
969 Map<String, String> rollbackData = new HashMap<String, String>();
970 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
971 if (rollbackSDNCRequest != null) {
972 if (rollbackSDNCRequest != "") {
973 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
976 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
977 if (rollbackNetworkRequest != null) {
978 if (rollbackNetworkRequest != "") {
979 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
982 execution.setVariable("rollbackData", rollbackData)
983 logger.debug("** rollbackData : " + rollbackData)
985 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
986 logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
988 } catch (Exception ex) {
989 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
990 logger.debug(exceptionMessage)
991 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
997 public void prepareSuccessRollbackData(DelegateExecution execution) {
999 execution.setVariable("prefix",Prefix)
1001 logger.trace("Inside prepareSuccessRollbackData() of DoUpdateNetworkInstance ")
1005 if (execution.getVariable("sdncVersion") != '1610') {
1006 // skip: 1702 for 'changeassign' or equivalent not yet defined in SNDC, so no rollback.
1008 prepareSDNCRollbackRequest(execution)
1011 Map<String, String> rollbackData = new HashMap<String, String>();
1012 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1013 if (rollbackSDNCRequest != null) {
1014 if (rollbackSDNCRequest != "") {
1015 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1018 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1019 if (rollbackNetworkRequest != null) {
1020 if (rollbackNetworkRequest != "") {
1021 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1024 execution.setVariable("rollbackData", rollbackData)
1026 logger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1027 execution.setVariable("WorkflowException", null)
1030 } catch (Exception ex) {
1031 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1032 logger.debug(exceptionMessage)
1033 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1039 public void setExceptionFlag(DelegateExecution execution){
1041 execution.setVariable("prefix",Prefix)
1043 logger.trace("Inside setExceptionFlag() of DoUpdateNetworkInstance ")
1047 execution.setVariable(Prefix + "isException", true)
1049 if (execution.getVariable("SavedWorkflowException1") != null) {
1050 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1052 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1054 logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1056 } catch(Exception ex){
1057 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1058 logger.debug(exceptionMessage)
1059 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1065 // *******************************
1066 // Build Error Section
1067 // *******************************
1069 public void processJavaException(DelegateExecution execution){
1071 execution.setVariable("prefix",Prefix)
1073 logger.debug("Caught a Java Exception")
1074 logger.debug("Started processJavaException Method")
1075 logger.debug("Variables List: " + execution.getVariables())
1076 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1077 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1079 }catch(Exception e){
1080 logger.debug("Caught Exception during processJavaException Method: " + e)
1081 execution.setVariable("UnexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated
1082 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
1084 logger.debug("Completed processJavaException Method")