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.graphinventory.entities.uri.Depth
41 import org.onap.so.bpmn.common.scripts.AaiUtil
42 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
43 import org.onap.so.bpmn.common.scripts.ExceptionUtil
44 import org.onap.so.bpmn.common.scripts.MsoUtils
45 import org.onap.so.bpmn.common.scripts.NetworkUtils
46 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
47 import org.onap.so.bpmn.common.scripts.VidUtils
48 import org.onap.so.bpmn.core.UrnPropertiesReader
49 import org.onap.so.bpmn.core.WorkflowException
50 import org.onap.so.bpmn.core.json.JsonUtils
51 import org.onap.so.constants.Defaults
52 import org.slf4j.Logger
53 import org.slf4j.LoggerFactory
57 * This groovy class supports the <class>DoUpdateNetworkInstance.bpmn</class> process.
60 public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor {
61 private static final Logger logger = LoggerFactory.getLogger( DoUpdateNetworkInstance.class);
63 String Prefix="UPDNETI_"
64 ExceptionUtil exceptionUtil = new ExceptionUtil()
65 JsonUtils jsonUtil = new JsonUtils()
66 VidUtils vidUtils = new VidUtils(this)
67 NetworkUtils networkUtils = new NetworkUtils()
68 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
71 * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
74 public InitializeProcessVariables(DelegateExecution execution){
75 /* Initialize all the process variables in this block */
77 execution.setVariable(Prefix + "messageId", "")
78 execution.setVariable("BasicAuthHeaderValuePO", "")
79 execution.setVariable("BasicAuthHeaderValueSDNC", "")
80 execution.setVariable(Prefix + "networkRequest", "")
81 execution.setVariable(Prefix + "networkInputs", "")
82 execution.setVariable(Prefix + "networkOutputs", "")
83 execution.setVariable(Prefix + "requestId", "")
84 execution.setVariable(Prefix + "source", "")
85 execution.setVariable(Prefix + "networkId", "")
87 execution.setVariable(Prefix + "isPONR", false) // Point-of-no-return, means, rollback is not needed
89 // AAI query Cloud Region
90 execution.setVariable(Prefix + "queryCloudRegionRequest","")
91 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
92 execution.setVariable(Prefix + "queryCloudRegionResponse","")
93 execution.setVariable(Prefix + "cloudRegionPo","")
94 execution.setVariable(Prefix + "cloudRegionSdnc","")
95 execution.setVariable(Prefix + "isCloudRegionGood", false)
98 execution.setVariable(Prefix + "queryIdAAIRequest","")
99 execution.setVariable(Prefix + "queryIdAAIResponse", "")
100 execution.setVariable(Prefix + "aaiIdReturnCode", "")
102 // AAI query vpn binding
103 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
104 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
105 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
106 execution.setVariable(Prefix + "vpnBindings", null)
107 execution.setVariable(Prefix + "vpnCount", 0)
108 execution.setVariable(Prefix + "routeCollection", "")
110 // AAI query network policy
111 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
112 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
113 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
114 execution.setVariable(Prefix + "networkPolicyUriList", null)
115 execution.setVariable(Prefix + "networkPolicyCount", 0)
116 execution.setVariable(Prefix + "networkCollection", "")
118 // AAI query route table reference
119 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
120 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
121 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
122 execution.setVariable(Prefix + "networkTableRefUriList", null)
123 execution.setVariable(Prefix + "networkTableRefCount", 0)
124 execution.setVariable(Prefix + "tableRefCollection", "")
127 execution.setVariable(Prefix + "requeryIdAAIRequest","")
128 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
129 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
131 // AAI update contrail
132 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
133 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
134 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
135 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
137 execution.setVariable(Prefix + "updateNetworkRequest", "")
138 execution.setVariable(Prefix + "updateNetworkResponse", "")
139 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
140 execution.setVariable(Prefix + "networkReturnCode", "")
141 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
143 execution.setVariable(Prefix + "changeAssignSDNCRequest", "")
144 execution.setVariable(Prefix + "changeAssignSDNCResponse", "")
145 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
146 execution.setVariable(Prefix + "sdncReturnCode", "")
147 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
148 execution.setVariable(Prefix + "sdncResponseSuccess", false)
150 execution.setVariable(Prefix + "isVnfBindingPresent", false)
151 execution.setVariable(Prefix + "Success", false)
152 execution.setVariable(Prefix + "serviceInstanceId", "")
154 execution.setVariable(Prefix + "isException", false)
158 // **************************************************
159 // Pre or Prepare Request Section
160 // **************************************************
162 * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
165 public void preProcessRequest (DelegateExecution execution) {
167 execution.setVariable("prefix",Prefix)
169 logger.trace("Inside preProcessRequest DoUpdateNetworkInstance Request ")
172 // initialize flow variables
173 InitializeProcessVariables(execution)
175 // GET Incoming request & validate 3 kinds of format.
176 execution.setVariable("action", "UPDATE")
177 String networkRequest = execution.getVariable("bpmnRequest")
178 if (networkRequest != null) {
179 if (networkRequest.contains("requestDetails")) {
180 // JSON format request is sent, create xml
182 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
183 logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
184 networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
186 } catch (Exception ex) {
187 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
188 logger.debug(dataErrorMessage)
189 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
192 // XML format request is sent
196 // vIPR format request is sent, create xml from individual variables
197 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
200 networkRequest = utils.formatXml(networkRequest)
201 logger.debug(networkRequest)
202 execution.setVariable(Prefix + "networkRequest", networkRequest)
203 logger.debug(" network-request - " + '\n' + networkRequest)
205 // validate 'disableRollback' (aka, 'suppressRollback')
206 boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
207 execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
208 logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
210 String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
211 execution.setVariable(Prefix + "networkInputs", networkInputs)
212 logger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
215 String messageId = execution.getVariable(Prefix + "messageId") // for testing
216 if (messageId == null || messageId == "") {
217 messageId = UUID.randomUUID()
218 logger.debug(" UPDNETI_messageId, random generated: " + messageId)
220 logger.debug(" UPDNETI_messageId, pre-assigned: " + messageId)
222 execution.setVariable(Prefix + "messageId", messageId)
224 String source = utils.getNodeText(networkRequest, "source")
225 execution.setVariable(Prefix + "source", source)
226 logger.debug(Prefix + "source - " + source)
228 String networkId = ""
229 if (utils.nodeExists(networkRequest, "network-id")) {
230 networkId = utils.getNodeText(networkRequest, "network-id")
231 if (networkId == 'null' || networkId == "") {
232 sendSyncError(execution)
233 // missing value of networkId
234 String dataErrorMessage = "Variable 'network-id' value/element is missing."
235 logger.debug(" Invalid Request - " + dataErrorMessage)
236 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
241 String lcpCloudRegion = ""
242 if (utils.nodeExists(networkRequest, "aic-cloud-region")) {
243 lcpCloudRegion = utils.getNodeText(networkRequest, "aic-cloud-region")
244 if ((lcpCloudRegion == 'null') || (lcpCloudRegion == "")) {
245 sendSyncError(execution)
246 String dataErrorMessage = "requestDetails has missing 'aic-cloud-region' value/element."
247 logger.debug(" Invalid Request - " + dataErrorMessage)
248 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
252 String serviceInstanceId = ""
253 if (utils.nodeExists(networkRequest, "service-instance-id")) {
254 serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
255 if ((serviceInstanceId == 'null') || (lcpCloudRegion == "")) {
256 sendSyncError(execution)
257 String dataErrorMessage = "Variable 'serviceInstanceId' value/element is missing."
258 logger.debug(" Invalid Request - " + dataErrorMessage)
259 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
263 // PO Authorization Info / headers Authorization=
264 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
268 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
269 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
270 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
272 } catch (IOException ex) {
273 String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - "
274 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
275 logger.debug(dataErrorMessage)
276 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
279 // Set variables for Generic Get Sub Flow use
280 execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
281 logger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
283 logger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
285 String sdncVersion = execution.getVariable("sdncVersion")
286 logger.debug("sdncVersion? : " + sdncVersion)
288 // build 'networkOutputs'
289 networkId = utils.getNodeText(networkRequest, "network-id")
290 if ((networkId == null) || (networkId == "null")) {
293 String networkName = utils.getNodeText(networkRequest, "network-name")
294 if ((networkName == null) || (networkName == "null")) {
297 String networkOutputs =
299 <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
300 <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
301 </network-outputs>"""
302 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
303 logger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
304 execution.setVariable(Prefix + "networkId", networkId)
305 execution.setVariable(Prefix + "networkName", networkName)
308 } catch (BpmnError e) {
311 } catch (Exception ex){
312 sendSyncError(execution)
314 String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - " + ex.getMessage()
315 logger.debug(exceptionMessage)
316 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
322 * Gets the service instance uri from aai
325 public void getServiceInstance(DelegateExecution execution) {
326 logger.trace("getServiceInstance ")
328 String serviceInstanceId = execution.getVariable('serviceInstanceId')
330 AAIResourcesClient resourceClient = new AAIResourcesClient()
331 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
333 if(!resourceClient.exists(uri)){
334 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Service Instance not found in aai")
336 Map<String, String> keys = uri.getURIKeys()
337 execution.setVariable("serviceType", keys.get(AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType))
338 execution.setVariable("subscriberName", keys.get(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId))
341 }catch(BpmnError e) {
343 }catch (Exception ex){
344 String msg = "Exception in getServiceInstance. " + ex.getMessage()
346 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
350 public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
352 execution.setVariable("prefix", Prefix)
354 logger.debug(" ***** Inside callRESTQueryAAICloudRegion of DoUpdateNetworkInstance ***** " )
357 String networkInputs = execution.getVariable(Prefix + "networkInputs")
358 String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
361 String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
362 AaiUtil aaiUtil = new AaiUtil(this)
364 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
365 def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
367 execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
369 String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
370 String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
372 if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
373 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
374 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
375 execution.setVariable(Prefix + "isCloudRegionGood", true)
378 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
379 logger.debug(dataErrorMessage)
380 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
384 logger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
386 } catch (BpmnError e) {
389 } catch (Exception ex) {
391 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
392 logger.debug(exceptionMessage)
393 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
399 public void callRESTQueryAAINetworkId(DelegateExecution execution) {
401 execution.setVariable("prefix", Prefix)
403 logger.debug(" ***** Inside callRESTQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
407 String networkRequest = execution.getVariable(Prefix + "networkRequest")
408 String networkId = utils.getNodeText(networkRequest, "network-id")
409 execution.setVariable(Prefix + "networkId", networkId)
411 AAIResourcesClient client = new AAIResourcesClient()
412 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
413 AAIResultWrapper network = client.get(uri, NotFoundException.class)
415 execution.setVariable(Prefix + "aaiIdReturnCode", "200")
417 execution.setVariable(Prefix + "queryIdAAIResponse", network)
420 } catch (NotFoundException e) {
421 String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
422 logger.debug(" AAI Query Failed. " + dataErrorMessage)
423 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
424 } catch (Exception ex) {
425 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
426 logger.debug(exceptionMessage)
427 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
433 public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
435 execution.setVariable("prefix", Prefix)
437 logger.debug(" ***** Inside callRESTReQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
441 String networkRequest = execution.getVariable(Prefix + "networkRequest")
442 String networkId = utils.getNodeText(networkRequest, "network-id")
444 AAIResourcesClient client = new AAIResourcesClient()
445 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
446 AAIResultWrapper network = client.get(uri, NotFoundException.class)
448 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
449 execution.setVariable(Prefix + "requeryIdAAIResponse", network)
451 L3Network net = network.asBean(L3Network.class).get()
452 String netId = net.getNetworkId()
453 String netName = net.getNetworkName()
454 String networkOutputs =
456 <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
457 <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
458 </network-outputs>"""
459 execution.setVariable(Prefix + "networkOutputs", networkOutputs)
460 logger.debug(" networkOutputs - " + '\n' + networkOutputs)
462 } catch (NotFoundException e) {
463 String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
464 logger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
465 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
466 } catch (Exception ex) {
467 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
468 logger.debug(exceptionMessage)
469 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
475 public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
477 execution.setVariable("prefix", Prefix)
479 logger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding of DoUpdateNetworkInstance ***** " )
484 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
485 if(queryIdAAIResponse.getRelationships().isPresent()){
486 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
488 logger.debug(Prefix + "vpnCount - " + uris.size())
490 if (uris.size() > 0) {
491 String routeTargets = ""
492 for(AAIResourceUri u : uris) {
494 AAIResourcesClient client = new AAIResourcesClient()
495 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
496 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
498 String routeTarget = ""
499 String routeRole = ""
500 if(binding.get().getRouteTargets() != null) {
501 List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
502 for(RouteTarget target : targets) {
503 routeTarget = target.getGlobalRouteTarget()
504 routeRole = target.getRouteTargetRole()
505 routeTargets += "<routeTargets>" + '\n' +
506 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
507 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
508 "</routeTargets>" + '\n'
514 execution.setVariable(Prefix + "routeCollection", routeTargets)
515 logger.debug(" UPDNETI_routeCollection - " + '\n' + routeTargets)
518 // reset return code to success
519 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
520 AaiUtil aaiUriUtil = new AaiUtil(this)
521 String schemaVersion = aaiUriUtil.getNamespace()
522 String aaiStubResponse =
523 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
524 <vpn-binding xmlns="${schemaVersion}">
525 <global-route-target/>
528 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
529 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
530 execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
531 logger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
536 } catch (NotFoundException e) {
537 logger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
538 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
539 } catch (Exception ex) {
540 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
541 logger.debug(exceptionMessage)
542 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
548 public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
550 execution.setVariable("prefix", Prefix)
552 logger.debug(" ***** Inside callRESTQueryAAINetworkPolicy of DoUpdateNetworkInstance ***** " )
556 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
557 if(queryIdAAIResponse.getRelationships().isPresent()){
558 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
560 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
561 logger.debug(Prefix + "networkPolicyCount - " + uris.size())
563 if (uris.size() > 0) {
565 String networkPolicies = ""
566 // AII loop call using list vpnBindings
567 for(AAIResourceUri u : uris) {
569 AAIResourcesClient client = new AAIResourcesClient()
570 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
572 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
574 String networkPolicy = p.getNetworkPolicyFqdn()
575 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
579 execution.setVariable(Prefix + "networkCollection", networkPolicies)
580 logger.debug(" UPDNETI_networkCollection - " + '\n' + networkPolicies)
583 // reset return code to success
584 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
585 AaiUtil aaiUriUtil = new AaiUtil(this)
586 String schemaVersion = aaiUriUtil.getNamespace()
587 String aaiStubResponse =
588 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
589 <network-policy xmlns="${schemaVersion}">
590 <network-policy-fqdn/>
593 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
594 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
595 execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
596 logger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
601 } catch (NotFoundException e) {
602 String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
603 logger.debug(dataErrorMessage)
604 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
605 } catch (Exception ex) {
606 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
607 logger.debug(exceptionMessage)
608 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
614 public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
616 execution.setVariable("prefix", Prefix)
618 logger.debug(" ***** Inside callRESTQueryAAINetworkTableRef of DoUpdateNetworkInstance ***** " )
621 AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
622 if(queryIdAAIResponse.getRelationships().isPresent()){
623 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
625 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
626 logger.debug(Prefix + "networkTableRefCount - " + uris.size())
628 logger.debug(" UPDNETI_networkTableRefCount - " + uris.size())
629 if (uris.size() > 0) {
631 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
633 // AII loop call using list vpnBindings
634 String networkTableRefs = ""
635 for(AAIResourceUri u : uris) {
637 AAIResourcesClient client = new AAIResourcesClient()
638 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
640 String networkTableRef = rt.getRouteTableReferenceFqdn()
641 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
645 execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
646 logger.debug(" UPDNETI_tableRefCollection - " + '\n' + networkTableRefs)
649 // reset return code to success
650 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
651 AaiUtil aaiUriUtil = new AaiUtil(this)
652 String schemaVersion = aaiUriUtil.getNamespace()
653 String aaiStubResponse =
654 """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
655 <route-table-references xmlns="${schemaVersion}">
656 <route-table-reference-fqdn/>
657 </route-table-references>
659 String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
660 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
661 execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
662 logger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
667 } catch (NotFoundException e) {
668 String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
669 logger.debug(dataErrorMessage)
670 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
672 } catch (Exception ex) {
673 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
674 logger.debug(exceptionMessage)
675 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
681 public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
682 execution.setVariable("prefix", Prefix)
683 logger.debug(" ***** Inside callRESTUpdateContrailAAINetwork of DoUpdateNetworkInstance ***** " )
686 String networkRequest = execution.getVariable(Prefix + "networkRequest")
687 String networkId = utils.getNodeText(networkRequest, "network-id")
688 AAIResultWrapper requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
689 String updateNetworkResponse = execution.getVariable(Prefix + "updateNetworkResponse")
691 L3Network oldL3Network = requeryIdAAIResponse.asBean(L3Network.class).get()
692 L3Network l3Network = new L3Network()
693 if (oldL3Network.getHeatStackId() != null) {
695 if (utils.nodeExists(updateNetworkResponse, 'networkStackId')) {
696 l3Network.setHeatStackId(utils.getNodeText(updateNetworkResponse, 'networkStackId'))
699 if (oldL3Network.getNeutronNetworkId() != null) {
701 if (utils.nodeExists(updateNetworkResponse, 'neutronNetworkId')) {
702 l3Network.setNeutronNetworkId(utils.getNodeText(updateNetworkResponse, 'neutronNetworkId'))
705 if (oldL3Network.getContrailNetworkFqdn() != null) {
707 if (utils.nodeExists(updateNetworkResponse, 'networkFqdn')) {
708 l3Network.setContrailNetworkFqdn(utils.getNodeText(updateNetworkResponse, 'networkFqdn'))
712 String status = utils.getNodeText(updateNetworkResponse, 'orchestration-status')
713 if(status.equals("pending-create") || status.equals("PendingCreate")){
714 l3Network.setOrchestrationStatus("Created")
716 l3Network.setOrchestrationStatus("Active")
719 AAIResourcesClient client = new AAIResourcesClient()
720 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
721 client.update(uri, l3Network)
723 List<Subnet> subnets = oldL3Network.getSubnets().getSubnet()
724 for(Subnet s:subnets){
725 String subnetOrchStatus = s.getOrchestrationStatus()
726 String subnetId = s.getSubnetId()
728 Subnet subnet = new Subnet()
729 String neutronSubnetId = networkUtils.extractNeutSubId(updateNetworkResponse, subnetId)
730 subnet.setNeutronSubnetId(neutronSubnetId)
731 if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
732 subnet.setOrchestrationStatus("Created")
734 subnet.setOrchestrationStatus("Active")
737 AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
738 client.update(subUri, subnet)
741 execution.setVariable(Prefix + "isPONR", true)
743 } catch (BpmnError e) {
745 } catch (NotFoundException e) {
746 String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
747 logger.debug(dataErrorMessage)
748 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
749 } catch (Exception ex) {
750 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
751 logger.debug(exceptionMessage)
752 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
758 public void prepareUpdateNetworkRequest (DelegateExecution execution) {
760 execution.setVariable("prefix", Prefix)
762 logger.trace("Inside prepareUpdateNetworkRequest of DoUpdateNetworkInstance ")
767 String requestId = execution.getVariable(Prefix + "requestId")
768 String messageId = execution.getVariable(Prefix + "messageId")
769 String source = execution.getVariable(Prefix + "source")
771 String requestInput = execution.getVariable(Prefix + "networkRequest")
772 L3Network queryIdResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
773 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
774 String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
776 // Prepare Network request
777 String routeCollection = execution.getVariable(Prefix + "routeCollection")
778 String policyCollection = execution.getVariable(Prefix + "networkCollection")
779 String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
780 String updateNetworkRequest = networkUtils.UpdateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
782 String buildUpdateNetworkRequestAsString = utils.formatXml(updateNetworkRequest)
783 buildUpdateNetworkRequestAsString = buildUpdateNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
784 logger.debug(buildUpdateNetworkRequestAsString)
786 execution.setVariable(Prefix + "updateNetworkRequest", buildUpdateNetworkRequestAsString)
787 logger.debug(" UPDNETI_updateNetworkRequest - " + "\n" + buildUpdateNetworkRequestAsString)
789 } catch (Exception ex) {
790 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareUpdateNetworkRequest() - " + ex.getMessage()
791 logger.debug(exceptionMessage)
792 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
798 public void prepareSDNCRequest (DelegateExecution execution) {
800 execution.setVariable("prefix", Prefix)
802 logger.trace("Inside prepareSDNCRequest of DoUpdateNetworkInstance ")
806 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
807 String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
808 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
810 String networkId = ""
811 if (utils.nodeExists(updateNetworkInput, "network-id")) {
812 networkId = utils.getNodeText(updateNetworkInput, "network-id")
814 if (networkId == null) {networkId = ""}
816 String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
818 AAIResultWrapper wrapper = execution.getVariable(Prefix + "queryIdAAIResponse")
819 L3Network queryAAIResponse = wrapper.asBean(L3Network.class).get()
821 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
822 String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "changeassign", "NetworkActivateRequest", cloudRegionId, networkId, queryAAIResponse, null)
824 String sndcTopologyUpdateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
825 logger.debug(sndcTopologyUpdateRequesAsString)
826 execution.setVariable(Prefix + "changeAssignSDNCRequest", sndcTopologyUpdateRequesAsString)
827 logger.debug(" UPDNETI_changeAssignSDNCRequest - " + "\n" + sndcTopologyUpdateRequesAsString)
830 } catch (Exception ex) {
831 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
832 logger.debug(exceptionMessage)
833 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
839 public void validateSDNCResponse (DelegateExecution execution) {
841 execution.setVariable("prefix", Prefix)
843 logger.trace("Inside validateSDNCResponse of DoUpdateNetworkInstance ")
845 String response = execution.getVariable(Prefix + "changeAssignSDNCResponse")
846 WorkflowException workflowException = null
848 workflowException = execution.getVariable(Prefix + "WorkflowException")
849 //execution.setVariable("WorkflowException", workflowException)
850 } catch (Exception ex) {
851 logger.debug(" Sdnc 'WorkflowException' object is empty or null. ")
854 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
856 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
857 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
859 String changeAssignSDNCResponseDecodeXml = execution.getVariable(Prefix + "changeAssignSDNCResponse")
860 changeAssignSDNCResponseDecodeXml = changeAssignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
861 execution.setVariable(Prefix + "changeAssignSDNCResponse", changeAssignSDNCResponseDecodeXml)
863 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, prefix+'sdncResponseSuccess'
864 execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
865 logger.debug("Successfully Validated SDNC Response")
868 logger.debug("Did NOT Successfully Validated SDNC Response")
869 throw new BpmnError("MSOWorkflowException")
875 public void postProcessResponse (DelegateExecution execution) {
877 execution.setVariable("prefix", Prefix)
879 logger.trace("Inside postProcessResponse of DoUpdateNetworkInstance ")
882 logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
883 if (execution.getVariable(Prefix + "isException") == false) {
885 execution.setVariable("orchestrationStatus", "")
886 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
887 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
888 prepareSuccessRollbackData(execution) // populate rollbackData
889 execution.setVariable("WorkflowException", null)
890 execution.setVariable(Prefix + "Success", true)
891 logger.debug(" ***** postProcessResponse(), GOOD !!!")
893 execution.setVariable(Prefix + "Success", false)
894 execution.setVariable("rollbackData", null)
895 String exceptionMessage = " Exception encountered in MSO Bpmn. "
896 if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
897 logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
898 WorkflowException wfex = execution.getVariable("workflowException")
899 exceptionMessage = wfex.getErrorMessage()
901 if (execution.getVariable(Prefix + "WorkflowException") != null) {
902 WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
903 exceptionMessage = pwfex.getErrorMessage()
906 // going to the Main flow: a-la-carte or macro
907 logger.debug(" ***** postProcessResponse(), BAD !!!")
908 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
909 throw new BpmnError("MSOWorkflowException")
912 } catch(BpmnError b){
913 logger.debug("Rethrowing MSOWorkflowException")
917 } catch (Exception ex) {
918 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
919 logger.debug(exceptionMessage)
920 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
927 public void prepareSDNCRollbackRequest (DelegateExecution execution) {
929 execution.setVariable("prefix", Prefix)
931 logger.trace("Inside prepareSDNCRollbackRequest of DoUpdateNetworkInstance ")
934 // for some reason the WorkflowException object is null after the sdnc rollback call task, need to save WorkflowException.
935 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
937 String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
938 String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
939 String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
940 String changeAssignSDNCResponse = execution.getVariable(Prefix + "changeAssignSDNCResponse")
941 String networkId = utils.getNodeText(changeAssignSDNCResponse, "network-id")
943 String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
945 // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
946 String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
947 String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
948 execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
949 logger.debug(" Preparing request for SDNC Topology assign's rollback/compensation . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
951 } catch (Exception ex) {
952 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
953 logger.debug(exceptionMessage)
954 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
960 public void prepareRollbackData(DelegateExecution execution) {
962 execution.setVariable("prefix",Prefix)
964 logger.trace("Inside prepareRollbackData() of DoUpdateNetworkInstance ")
968 Map<String, String> rollbackData = new HashMap<String, String>();
969 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
970 if (rollbackSDNCRequest != null) {
971 if (rollbackSDNCRequest != "") {
972 rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
975 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
976 if (rollbackNetworkRequest != null) {
977 if (rollbackNetworkRequest != "") {
978 rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
981 execution.setVariable("rollbackData", rollbackData)
982 logger.debug("** rollbackData : " + rollbackData)
984 execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
985 logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
987 } catch (Exception ex) {
988 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
989 logger.debug(exceptionMessage)
990 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
996 public void prepareSuccessRollbackData(DelegateExecution execution) {
998 execution.setVariable("prefix",Prefix)
1000 logger.trace("Inside prepareSuccessRollbackData() of DoUpdateNetworkInstance ")
1004 if (execution.getVariable("sdncVersion") != '1610') {
1005 // skip: 1702 for 'changeassign' or equivalent not yet defined in SNDC, so no rollback.
1007 prepareSDNCRollbackRequest(execution)
1010 Map<String, String> rollbackData = new HashMap<String, String>();
1011 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
1012 if (rollbackSDNCRequest != null) {
1013 if (rollbackSDNCRequest != "") {
1014 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
1017 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
1018 if (rollbackNetworkRequest != null) {
1019 if (rollbackNetworkRequest != "") {
1020 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
1023 execution.setVariable("rollbackData", rollbackData)
1025 logger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
1026 execution.setVariable("WorkflowException", null)
1029 } catch (Exception ex) {
1030 String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
1031 logger.debug(exceptionMessage)
1032 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1038 public void setExceptionFlag(DelegateExecution execution){
1040 execution.setVariable("prefix",Prefix)
1042 logger.trace("Inside setExceptionFlag() of DoUpdateNetworkInstance ")
1046 execution.setVariable(Prefix + "isException", true)
1048 if (execution.getVariable("SavedWorkflowException1") != null) {
1049 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1051 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1053 logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1055 } catch(Exception ex){
1056 String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1057 logger.debug(exceptionMessage)
1058 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1064 // *******************************
1065 // Build Error Section
1066 // *******************************
1068 public void processJavaException(DelegateExecution execution){
1070 execution.setVariable("prefix",Prefix)
1072 logger.debug("Caught a Java Exception")
1073 logger.debug("Started processJavaException Method")
1074 logger.debug("Variables List: " + execution.getVariables())
1075 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
1076 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1078 }catch(Exception e){
1079 logger.debug("Caught Exception during processJavaException Method: " + e)
1080 execution.setVariable("UnexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated
1081 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
1083 logger.debug("Completed processJavaException Method")