2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.infrastructure.scripts
23 import org.apache.commons.lang3.*
24 import org.camunda.bpm.engine.delegate.BpmnError
25 import org.camunda.bpm.engine.delegate.DelegateExecution
26 import org.onap.so.bpmn.common.recipe.ResourceInput
27 import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
28 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
29 import org.onap.so.bpmn.common.scripts.ExceptionUtil
30 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
31 import org.onap.so.bpmn.core.json.JsonUtils
32 import org.onap.so.bpmn.core.UrnPropertiesReader
33 import org.onap.so.logger.MsoLogger
35 import static org.apache.commons.lang3.StringUtils.*
38 * This groovy class supports the <class>DeleteSDNCCNetworkResource.bpmn</class> process.
39 * flow for SDNC Network Resource
41 public class DeleteSDNCNetworkResource extends AbstractServiceTaskProcessor {
42 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DeleteSDNCNetworkResource.class);
44 String Prefix="DELSDNCRES_"
46 ExceptionUtil exceptionUtil = new ExceptionUtil()
48 JsonUtils jsonUtil = new JsonUtils()
50 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
52 public void preProcessRequest(DelegateExecution execution){
53 msoLogger.info(" ***** Started preProcessRequest *****")
56 //get bpmn inputs from resource request.
57 String requestId = execution.getVariable("mso-request-id")
58 String requestAction = execution.getVariable("requestAction")
59 msoLogger.info("The requestAction is: " + requestAction)
60 String recipeParamsFromRequest = execution.getVariable("recipeParams")
61 msoLogger.info("The recipeParams is: " + recipeParamsFromRequest)
62 String resourceInput = execution.getVariable("resourceInput")
63 msoLogger.info("The resourceInput is: " + resourceInput)
64 //Get ResourceInput Object
65 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
66 execution.setVariable(Prefix + "resourceInput", resourceInputObj)
68 //Deal with recipeParams
69 String recipeParamsFromWf = execution.getVariable("recipeParamXsd")
70 String resourceModelName = resourceInputObj.getResourceModelInfo().getModelName()
71 //For sdnc requestAction default is "NetworkInstance"
72 String operationType = "Network"
73 if(!StringUtils.isBlank(recipeParamsFromRequest) && "null" != recipeParamsFromRequest){
74 //the operationType from worflow(first node) is second priority.
75 operationType = jsonUtil.getJsonValue(recipeParamsFromRequest, "operationType")
77 if(!StringUtils.isBlank(recipeParamsFromWf)){
78 //the operationType from worflow(first node) is highest priority.
79 operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
83 //For sdnc, generate svc_action and request_action
84 String sdnc_svcAction = "delete"
85 switch (resourceInputObj.getResourceModelInfo().getModelName()) {
87 case ~/[\w\s\W]*overlay[\w\s\W]*/ :
88 ///This will be resolved in R3.
89 sdnc_svcAction ="deactivate"
90 operationType = "NCINetwork"
93 case ~/[\w\s\W]*underlay[\w\s\W]*/ :
94 //This will be resolved in R3.
95 operationType ="Network"
98 case ~/[\w\s\W]*SOTNConnectivity[\w\s\W]*/ :
99 operationType = "SOTNConnectivity"
100 execution.setVariable("isActivateRequired", "true")
103 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
104 operationType = "SOTNAttachment"
105 execution.setVariable("isActivateRequired", "true")
108 case ~/[\w\s\W]*SiteVF[\w\s\W]*/ :
109 operationType = "Site"
110 execution.setVariable("isActivateRequired", "true")
113 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
114 operationType = "SDWANDevice"
115 execution.setVariable("isActivateRequired", "true")
118 case ~/[\w\s\W]*SDWANConnectivity[\w\s\W]*/ :
119 operationType = "SDWANConnectivity"
120 execution.setVariable("isActivateRequired", "true")
123 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
124 operationType = "SDWANAttachment"
125 execution.setVariable("isActivateRequired", "true")
128 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
129 operationType = "SDWANPort"
130 execution.setVariable("isActivateRequired", "true")
136 String sdnc_requestAction = StringUtils.capitalize(sdnc_svcAction) + operationType +"Instance"
137 execution.setVariable(Prefix + "svcAction", sdnc_svcAction)
138 execution.setVariable(Prefix + "requestAction", sdnc_requestAction)
139 execution.setVariable(Prefix + "serviceInstanceId", resourceInputObj.getServiceInstanceId())
140 execution.setVariable("mso-request-id", requestId)
141 execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
142 } catch (BpmnError e) {
144 } catch (Exception ex){
145 msg = "Exception in preProcessRequest " + ex.getMessage()
146 msoLogger.debug( msg)
147 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
152 * Pre Process the BPMN Flow Request
154 * generate the nsOperationKey
155 * generate the nsParameters
157 public void prepareSDNCRequest (DelegateExecution execution) {
158 msoLogger.info(" ***** Started prepareSDNCRequest *****")
162 String sdnc_svcAction = execution.getVariable(Prefix + "svcAction")
163 String sdnc_requestAction = execution.getVariable(Prefix + "requestAction")
164 String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
165 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
167 String hdrRequestId = execution.getVariable("mso-request-id")
168 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
169 String source = execution.getVariable("source")
170 String sdnc_service_id = execution.getVariable(Prefix + "sdncServiceId")
171 ResourceInput resourceInputObj = execution.getVariable(Prefix + "resourceInput")
172 String serviceType = resourceInputObj.getServiceType()
173 String serviceModelInvariantUuid = resourceInputObj.getServiceModelInfo().getModelInvariantUuid()
174 String serviceModelUuid = resourceInputObj.getServiceModelInfo().getModelUuid()
175 String serviceModelVersion = resourceInputObj.getServiceModelInfo().getModelVersion()
176 String serviceModelName = resourceInputObj.getServiceModelInfo().getModelName()
177 String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
178 String modelInvariantUuid = resourceInputObj.getResourceModelInfo().getModelInvariantUuid();
179 String modelCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
180 String modelUuid = resourceInputObj.getResourceModelInfo().getModelUuid()
181 String modelName = resourceInputObj.getResourceModelInfo().getModelName()
182 String modelVersion = resourceInputObj.getResourceModelInfo().getModelVersion()
183 String resourceInstnaceId = resourceInputObj.getResourceInstancenUuid()
184 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
185 String sdncTopologyDeleteRequest = ""
188 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
189 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
190 case ~/[\w\s\W]*SiteVF[\w\s\W]*/:
191 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
192 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
193 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
194 <sdncadapter:RequestHeader>
195 <sdncadapter:RequestId>${msoUtils.xmlEncode(hdrRequestId)}</sdncadapter:RequestId>
196 <sdncadapter:SvcInstanceId>${msoUtils.xmlEncode(serviceInstanceId)}</sdncadapter:SvcInstanceId>
197 <sdncadapter:SvcAction>${msoUtils.xmlEncode(sdnc_svcAction)}</sdncadapter:SvcAction>
198 <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
199 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
200 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
201 </sdncadapter:RequestHeader>
202 <sdncadapterworkflow:SDNCRequestData>
203 <request-information>
204 <request-id>${msoUtils.xmlEncode(hdrRequestId)}</request-id>
205 <request-action>${msoUtils.xmlEncode(sdnc_requestAction)}</request-action>
206 <source>${msoUtils.xmlEncode(source)}</source>
207 <notification-url></notification-url>
208 <order-number></order-number>
209 <order-version></order-version>
210 </request-information>
211 <service-information>
212 <service-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-id>
213 <subscription-service-type>${msoUtils.xmlEncode(serviceType)}</subscription-service-type>
214 <onap-model-information>
215 <model-invariant-uuid>${msoUtils.xmlEncode(serviceModelInvariantUuid)}</model-invariant-uuid>
216 <model-uuid>${msoUtils.xmlEncode(serviceModelUuid)}</model-uuid>
217 <model-version>${msoUtils.xmlEncode(serviceModelVersion)}</model-version>
218 <model-name>${msoUtils.xmlEncode(serviceModelName)}</model-name>
219 </onap-model-information>
220 <service-instance-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-instance-id>
221 <global-customer-id>${msoUtils.xmlEncode(globalCustomerId)}</global-customer-id>
222 <subscriber-name>${msoUtils.xmlEncode(globalCustomerId)}</subscriber-name>
223 </service-information>
225 <vnf-id>$resourceInstnaceId</vnf-id>
226 <vnf-type></vnf-type>
227 <onap-model-information>
228 <model-invariant-uuid>${msoUtils.xmlEncode(modelInvariantUuid)}</model-invariant-uuid>
229 <model-customization-uuid>${msoUtils.xmlEncode(modelCustomizationUuid)}</model-customization-uuid>
230 <model-uuid>${msoUtils.xmlEncode(modelUuid)}</model-uuid>
231 <model-version>${msoUtils.xmlEncode(modelVersion)}</model-version>
232 <model-name>${msoUtils.xmlEncode(modelName)}</model-name>
233 </onap-model-information>
236 <vnf-input-parameters>
237 </vnf-input-parameters>
238 <request-version></request-version>
239 <vnf-name></vnf-name>
243 </sdncadapterworkflow:SDNCRequestData>
244 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
247 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
248 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
249 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
250 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
251 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
252 <sdncadapter:RequestHeader>
253 <sdncadapter:RequestId>${msoUtils.xmlEncode(hdrRequestId)}</sdncadapter:RequestId>
254 <sdncadapter:SvcInstanceId>${msoUtils.xmlEncode(serviceInstanceId)}</sdncadapter:SvcInstanceId>
255 <sdncadapter:SvcAction>${msoUtils.xmlEncode(sdnc_svcAction)}</sdncadapter:SvcAction>
256 <sdncadapter:SvcOperation>connection-attachment-topology-operation</sdncadapter:SvcOperation>
257 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
258 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
259 </sdncadapter:RequestHeader>
260 <sdncadapterworkflow:SDNCRequestData>
261 <request-information>
262 <request-id>${msoUtils.xmlEncode(hdrRequestId)}</request-id>
263 <request-action>${msoUtils.xmlEncode(sdnc_requestAction)}</request-action>
264 <source>${msoUtils.xmlEncode(source)}</source>
265 <notification-url></notification-url>
266 <order-number></order-number>
267 <order-version></order-version>
268 </request-information>
269 <service-information>
270 <service-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-id>
271 <subscription-service-type>${msoUtils.xmlEncode(serviceType)}</subscription-service-type>
272 <onap-model-information>
273 <model-invariant-uuid>${msoUtils.xmlEncode(serviceModelInvariantUuid)}</model-invariant-uuid>
274 <model-uuid>${msoUtils.xmlEncode(serviceModelUuid)}</model-uuid>
275 <model-version>${msoUtils.xmlEncode(serviceModelVersion)}</model-version>
276 <model-name>${msoUtils.xmlEncode(serviceModelName)}</model-name>
277 </onap-model-information>
278 <service-instance-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-instance-id>
279 <global-customer-id>${msoUtils.xmlEncode(globalCustomerId)}</global-customer-id>
280 <subscriber-name></subscriber-name>
281 </service-information>
282 <allotted-resource-information>
283 <allotted-resource-id>$resourceInstnaceId</allotted-resource-id>
284 <allotted-resource-type></allotted-resource-type>
285 <parent-service-instance-id></parent-service-instance-id>
286 <onap-model-information>
287 <model-invariant-uuid>${msoUtils.xmlEncode(modelInvariantUuid)}</model-invariant-uuid>
288 <model-customization-uuid>${msoUtils.xmlEncode(modelCustomizationUuid)}</model-customization-uuid>
289 <model-uuid>${msoUtils.xmlEncode(modelUuid)}</model-uuid>
290 <model-version>${msoUtils.xmlEncode(modelVersion)}</model-version>
291 <model-name>${msoUtils.xmlEncode(modelName)}</model-name>
292 </onap-model-information>
293 </allotted-resource-information>
294 <connection-attachment-request-input>
295 </connection-attachment-request-input>
296 </sdncadapterworkflow:SDNCRequestData>
297 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
301 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
302 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
303 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
304 <sdncadapter:RequestHeader>
305 <sdncadapter:RequestId>${msoUtils.xmlEncode(hdrRequestId)}</sdncadapter:RequestId>
306 <sdncadapter:SvcInstanceId>${msoUtils.xmlEncode(serviceInstanceId)}</sdncadapter:SvcInstanceId>
307 <sdncadapter:SvcAction>${msoUtils.xmlEncode(sdnc_svcAction)}</sdncadapter:SvcAction>
308 <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
309 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
310 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
311 </sdncadapter:RequestHeader>
312 <sdncadapterworkflow:SDNCRequestData>
313 <request-information>
314 <request-id>${msoUtils.xmlEncode(hdrRequestId)}</request-id>
315 <request-action>${msoUtils.xmlEncode(sdnc_requestAction)}</request-action>
316 <source>${msoUtils.xmlEncode(source)}</source>
317 <notification-url></notification-url>
318 <order-number></order-number>
319 <order-version></order-version>
320 </request-information>
321 <service-information>
322 <service-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-id>
323 <subscription-service-type>${msoUtils.xmlEncode(serviceType)}</subscription-service-type>
324 <onap-model-information>
325 <model-invariant-uuid>${msoUtils.xmlEncode(serviceModelInvariantUuid)}</model-invariant-uuid>
326 <model-uuid>${msoUtils.xmlEncode(serviceModelUuid)}</model-uuid>
327 <model-version>${msoUtils.xmlEncode(serviceModelVersion)}</model-version>
328 <model-name>${msoUtils.xmlEncode(serviceModelName)}</model-name>
329 </onap-model-information>
330 <service-instance-id>${msoUtils.xmlEncode(serviceInstanceId)}</service-instance-id>
331 <global-customer-id>${msoUtils.xmlEncode(globalCustomerId)}</global-customer-id>
332 </service-information>
333 <network-information>
334 <network-id>$resourceInstnaceId</network-id>
335 <onap-model-information>
336 <model-invariant-uuid>${msoUtils.xmlEncode(modelInvariantUuid)}</model-invariant-uuid>
337 <model-customization-uuid>${msoUtils.xmlEncode(modelCustomizationUuid)}</model-customization-uuid>
338 <model-uuid>${msoUtils.xmlEncode(modelUuid)}</model-uuid>
339 <model-version>${msoUtils.xmlEncode(modelVersion)}</model-version>
340 <model-name>${msoUtils.xmlEncode(modelName)}</model-name>
341 </onap-model-information>
342 </network-information>
343 <network-request-input>
344 <network-input-parameters></network-input-parameters>
345 </network-request-input>
346 </sdncadapterworkflow:SDNCRequestData>
347 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
350 String sdncTopologyDeleteRequesAsString = utils.formatXml(sdncTopologyDeleteRequest)
351 utils.logAudit(sdncTopologyDeleteRequesAsString)
352 execution.setVariable("sdncAdapterWorkflowRequest", sdncTopologyDeleteRequesAsString)
353 msoLogger.info("sdncAdapterWorkflowRequest - " + "\n" + sdncTopologyDeleteRequesAsString)
355 } catch (Exception ex) {
356 String exceptionMessage = " Bpmn error encountered in DeleteSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage()
357 msoLogger.debug( exceptionMessage)
358 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
361 msoLogger.info(" ***** Exit prepareSDNCRequest *****")
364 private void setProgressUpdateVariables(DelegateExecution execution, String body) {
365 def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.openecomp.db.endpoint", execution)
366 execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
367 execution.setVariable("CVFMI_updateResOperStatusRequest", body)
370 public void prepareUpdateBeforeDeleteSDNCResource(DelegateExecution execution) {
371 ResourceInput resourceInputObj = execution.getVariable(Prefix + "resourceInput")
372 String operType = resourceInputObj.getOperationType()
373 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
374 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
375 String operationId = resourceInputObj.getOperationId()
376 String progress = "20"
377 String status = "processing"
378 String statusDescription = "SDCN resource delete invoked"
380 //String operationId = execution.getVariable("operationId")
383 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
384 xmlns:ns="http://org.openecomp.mso/requestsdb">
387 <ns:updateResourceOperationStatus>
388 <operType>${msoUtils.xmlEncode(operType)}</operType>
389 <operationId>${msoUtils.xmlEncode(operationId)}</operationId>
390 <progress>${msoUtils.xmlEncode(progress)}</progress>
391 <resourceTemplateUUID>${msoUtils.xmlEncode(resourceCustomizationUuid)}</resourceTemplateUUID>
392 <serviceId>${msoUtils.xmlEncode(serviceInstanceId)}</serviceId>
393 <status>${msoUtils.xmlEncode(status)}</status>
394 <statusDescription>${msoUtils.xmlEncode(statusDescription)}</statusDescription>
395 </ns:updateResourceOperationStatus>
397 </soapenv:Envelope>""";
399 setProgressUpdateVariables(execution, body)
403 public void prepareUpdateAfterDeleteSDNCResource(DelegateExecution execution) {
404 ResourceInput resourceInputObj = execution.getVariable(Prefix + "resourceInput")
405 String operType = resourceInputObj.getOperationType()
406 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
407 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
408 String operationId = resourceInputObj.getOperationId()
409 String progress = "100"
410 String status = "finished"
411 String statusDescription = "SDCN resource delete and deactivation completed"
413 //String operationId = execution.getVariable("operationId")
416 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
417 xmlns:ns="http://org.openecomp.mso/requestsdb">
420 <ns:updateResourceOperationStatus>
421 <operType>${msoUtils.xmlEncode(operType)}</operType>
422 <operationId>${msoUtils.xmlEncode(operationId)}</operationId>
423 <progress>${msoUtils.xmlEncode(progress)}</progress>
424 <resourceTemplateUUID>${msoUtils.xmlEncode(resourceCustomizationUuid)}</resourceTemplateUUID>
425 <serviceId>${msoUtils.xmlEncode(serviceInstanceId)}</serviceId>
426 <status>${msoUtils.xmlEncode(status)}</status>
427 <statusDescription>${msoUtils.xmlEncode(statusDescription)}</statusDescription>
428 </ns:updateResourceOperationStatus>
430 </soapenv:Envelope>""";
432 setProgressUpdateVariables(execution, body)
435 public void postDeleteSDNCCall(DelegateExecution execution){
436 msoLogger.info(" ***** Started prepareSDNCRequest *****")
437 String responseCode = execution.getVariable(Prefix + "sdncDeleteReturnCode")
438 String responseObj = execution.getVariable(Prefix + "SuccessIndicator")
440 msoLogger.info("response from sdnc, response code :" + responseCode + " response object :" + responseObj)
441 msoLogger.info(" ***** Exit prepareSDNCRequest *****")
444 public void sendSyncResponse (DelegateExecution execution) {
445 msoLogger.debug( " *** sendSyncResponse *** ")
448 String operationStatus = "finished"
449 // RESTResponse for main flow
450 String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim()
451 msoLogger.debug( " sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
452 sendWorkflowResponse(execution, 202, resourceOperationResp)
453 execution.setVariable("sentSyncResponse", true)
455 } catch (Exception ex) {
456 String msg = "Exception in sendSyncResponse:" + ex.getMessage()
457 msoLogger.debug( msg)
458 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
460 msoLogger.debug(" ***** Exit sendSyncResponse *****")