Fixes for bugs found in Transport Slicing integration 41/114341/2
authorhyu2010 <hyu2010b@gmail.com>
Tue, 27 Oct 2020 22:13:25 +0000 (18:13 -0400)
committerhyu2010 <hyu2010b@gmail.com>
Thu, 29 Oct 2020 14:59:25 +0000 (10:59 -0400)
This update contains for the fixes for the following JIRAs:

SO-3339: Transport Slicing integration: network-policy is missing under
         allotted-resource
SO-3344: Transport Slicing integration: missing vnf input parameters in
         SO-SNDC payload

Issue-ID: SO-3339
Issue-ID: SO-3344

Signed-off-by: hyu2010 <hyu2010b@gmail.com>
Change-Id: I2464bccb1f6be94f9ff89adc76ea5e0fa02793bc
Signed-off-by: hyu2010 <hyu2010b@gmail.com>
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateTnNssiInstance.bpmn

index 7beafef..f20bca9 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.so.bpmn.infrastructure.scripts
 
 import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.onap.aai.domain.yang.NetworkPolicy
 import org.onap.aai.domain.yang.SliceProfile
 import org.onap.aaiclient.client.aai.AAIResourcesClient
 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
@@ -133,7 +134,7 @@ class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor {
             throw e
         } catch (Exception ex) {
             String msg = "Exception in DoCreateTnNssiInstance.createServiceInstance: " + ex.getMessage()
-            logger.info(msg)
+            logger.error(msg)
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
         }
     }
@@ -163,6 +164,8 @@ class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor {
                 resource.setAllottedResourceName("network_" + execution.getVariable("sliceServiceInstanceName"))
                 getAAIClient().create(allottedResourceUri, resource)
 
+                createNetworkPolicyForAllocatedResource(execution, ssInstanceId, allottedResourceId)
+
                 String linkArrayStr = jsonUtil.getJsonValue(networkStr, "connectionLinks")
                 createLogicalLinksForAllocatedResource(execution, linkArrayStr, ssInstanceId, allottedResourceId)
             }
@@ -170,7 +173,81 @@ class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor {
             throw e
         } catch (Exception ex) {
             String msg = "Exception in DoCreateTnNssiInstance.createAllottedResource: " + ex.getMessage()
-            logger.info(msg)
+            logger.error(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+    }
+
+    void createNetworkPolicy(DelegateExecution execution, String ssInstanceId, String networkPolicyId) {
+        try {
+
+            String sliceProfileStr = execution.getVariable("sliceProfile")
+            if (sliceProfileStr == null || sliceProfileStr.isEmpty()) {
+                String msg = "ERROR: createNetworkPolicy: sliceProfile is null"
+                logger.error(msg)
+                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+            }
+
+            NetworkPolicy networkPolicy = new NetworkPolicy();
+            networkPolicy.setNetworkPolicyId(networkPolicyId)
+            networkPolicy.setName("TSCi policy")
+            networkPolicy.setType("SLA")
+            networkPolicy.setNetworkPolicyFqdn(ssInstanceId)
+
+            String latencyStr = jsonUtil.getJsonValue(sliceProfileStr, "latency")
+            if (latencyStr != null && !latencyStr.isEmpty()) {
+                networkPolicy.setLatency(Integer.parseInt(latencyStr))
+            }
+
+            String bwStr = jsonUtil.getJsonValue(sliceProfileStr, "maxBandwidth")
+            if (bwStr != null && !bwStr.isEmpty()) {
+                networkPolicy.setMaxBandwidth(Integer.parseInt(bwStr))
+            } else {
+                log.debug("ERROR: createNetworkPolicy: maxBandwidth is null")
+            }
+
+            //networkPolicy.setReliability(new Object())
+
+            AAIResourceUri networkPolicyUri =
+                    AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkPolicy(networkPolicyId))
+            getAAIClient().create(networkPolicyUri, networkPolicy)
+
+        } catch (BpmnError e) {
+            throw e
+        } catch (Exception ex) {
+            String msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
+            logger.error(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+    }
+
+    void createNetworkPolicyForAllocatedResource(DelegateExecution execution,
+                                                 String ssInstanceId,
+                                                 String allottedResourceId) {
+        try {
+            AAIResourceUri allottedResourceUri =
+                    AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+                            .customer(execution.getVariable("globalSubscriberId"))
+                            .serviceSubscription(execution.getVariable("subscriptionServiceType"))
+                            .serviceInstance(ssInstanceId)
+                            .allottedResource(allottedResourceId))
+
+            if (!getAAIClient().exists(allottedResourceUri)) {
+                logger.info("ERROR: createLogicalLinksForAllocatedResource: allottedResource not exist: uri={}",
+                        allottedResourceUri)
+                return
+            }
+
+            String networkPolicyId = UUID.randomUUID().toString()
+            createNetworkPolicy(execution, ssInstanceId, networkPolicyId)
+
+            tnNssmfUtils.attachNetworkPolicyToAllottedResource(execution, AAI_VERSION, allottedResourceUri, networkPolicyId);
+
+        } catch (BpmnError e) {
+            throw e
+        } catch (Exception ex) {
+            String msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
+            logger.error(msg)
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
         }
     }
@@ -219,7 +296,7 @@ class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor {
             throw e
         } catch (Exception ex) {
             String msg = "Exception in DoCreateTnNssiInstance.createLogicalLinksForAllocatedResource: " + ex.getMessage()
-            logger.info(msg)
+            logger.error(msg)
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
         }
     }
index e856522..8a276ed 100644 (file)
@@ -321,7 +321,8 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
                                 String status,
                                 String progress,
                                 String statusDescription) {
-        String serviceId = execution.getVariable("sliceServiceInstanceId")
+        String serviceId = execution.getVariable("dummyServiceId")
+        String ssInstanceId = execution.getVariable("sliceServiceInstanceId")
         String jobId = execution.getVariable("jobId")
         String nsiId = execution.getVariable("nsiId")
 
@@ -329,6 +330,7 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
         roStatus.setServiceId(serviceId)
         roStatus.setOperationId(jobId)
         roStatus.setResourceTemplateUUID(nsiId)
+        roStatus.setResourceInstanceID(ssInstanceId)
         roStatus.setOperType("Allocate")
         roStatus.setProgress(progress)
         roStatus.setStatus(status)
index 869b55b..d97f416 100644 (file)
@@ -118,55 +118,67 @@ class TnNssmfUtils {
         if (execution.getVariable("vnfParamsExistFlag") == true) {
             sdncVNFParamsXml = buildSDNCParamsXml(execution)
         } else {
-            sdncVNFParamsXml = ""
+            sdncVNFParamsXml = buildDefaultVnfInputParams(vnfId)
         }
 
         String sdncRequest =
-                """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.onap/so/request/types/v1"
-                                                                                                       xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1"
-                                                                                                       xmlns:sdncadapter="http://org.onap/workflow/sdnc/adapter/schema/v1">
-          <sdncadapter:RequestHeader>
-                               <sdncadapter:RequestId>${MsoUtils.xmlEscape(uuid)}</sdncadapter:RequestId>
-                               <sdncadapter:SvcInstanceId>${MsoUtils.xmlEscape(svcInstId)}</sdncadapter:SvcInstanceId>
-                               <sdncadapter:SvcAction>${MsoUtils.xmlEscape(svcAction)}</sdncadapter:SvcAction>
-                               <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
-                               <sdncadapter:CallbackUrl>${MsoUtils.xmlEscape(callbackURL)}</sdncadapter:CallbackUrl>
-                               <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
-               </sdncadapter:RequestHeader>
-       <sdncadapterworkflow:SDNCRequestData>
-               <request-information>
-                       <request-id>${MsoUtils.xmlEscape(requestId)}</request-id>
-                       <request-action>${MsoUtils.xmlEscape(reqAction)}</request-action>
-                       <source>${MsoUtils.xmlEscape(source)}</source>
-                       <notification-url/>
-                       <order-number/>
-                       <order-version/>
-               </request-information>
-               <service-information>
-                       <service-id>${MsoUtils.xmlEscape(serviceId)}</service-id>
-                       <subscription-service-type>${MsoUtils.xmlEscape(subServiceType)}</subscription-service-type>
-                       ${serviceEcompModelInformation}
-                       <service-instance-id>${MsoUtils.xmlEscape(svcInstId)}</service-instance-id>
-                       <global-customer-id>${MsoUtils.xmlEscape(globalSubscriberId)}</global-customer-id>
-               </service-information>
-               <vnf-information>
-                       <vnf-id>${MsoUtils.xmlEscape(vnfId)}</vnf-id>
-                       <vnf-type>${MsoUtils.xmlEscape(vnfType)}</vnf-type>
-                       ${vnfEcompModelInformation}
-               </vnf-information>
-               <vnf-request-input>
-                       ${vnfNameString}
-                       <tenant>${MsoUtils.xmlEscape(tenantId)}</tenant>
-                       <aic-cloud-region>${MsoUtils.xmlEscape(cloudSiteId)}</aic-cloud-region>
-                       ${sdncVNFParamsXml}
-               </vnf-request-input>
-       </sdncadapterworkflow:SDNCRequestData>
-       </sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
+        """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.onap/so/request/types/v1"
+                                                    xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1"
+                                                    xmlns:sdncadapter="http://org.onap/workflow/sdnc/adapter/schema/v1">
+         <sdncadapter:RequestHeader>
+            <sdncadapter:RequestId>${MsoUtils.xmlEscape(uuid)}</sdncadapter:RequestId>
+            <sdncadapter:SvcInstanceId>${MsoUtils.xmlEscape(svcInstId)}</sdncadapter:SvcInstanceId>
+            <sdncadapter:SvcAction>${MsoUtils.xmlEscape(svcAction)}</sdncadapter:SvcAction>
+            <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
+            <sdncadapter:CallbackUrl>${MsoUtils.xmlEscape(callbackURL)}</sdncadapter:CallbackUrl>
+            <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+         </sdncadapter:RequestHeader>
+    <sdncadapterworkflow:SDNCRequestData>
+        <request-information>
+            <request-id>${MsoUtils.xmlEscape(requestId)}</request-id>
+            <request-action>${MsoUtils.xmlEscape(reqAction)}</request-action>
+            <source>${MsoUtils.xmlEscape(source)}</source>
+            <notification-url/>
+            <order-number/>
+            <order-version/>
+        </request-information>
+        <service-information>
+            <service-id>${MsoUtils.xmlEscape(serviceId)}</service-id>
+            <subscription-service-type>${MsoUtils.xmlEscape(subServiceType)}</subscription-service-type>
+            ${serviceEcompModelInformation}
+            <service-instance-id>${MsoUtils.xmlEscape(svcInstId)}</service-instance-id>
+            <global-customer-id>${MsoUtils.xmlEscape(globalSubscriberId)}</global-customer-id>
+        </service-information>
+        <vnf-information>
+            <vnf-id>${MsoUtils.xmlEscape(vnfId)}</vnf-id>
+            <vnf-type>${MsoUtils.xmlEscape(vnfType)}</vnf-type>
+            ${vnfEcompModelInformation}
+        </vnf-information>
+        <vnf-request-input>
+            ${vnfNameString}
+            <tenant>${MsoUtils.xmlEscape(tenantId)}</tenant>
+            <aic-cloud-region>${MsoUtils.xmlEscape(cloudSiteId)}</aic-cloud-region>
+            ${sdncVNFParamsXml}
+        </vnf-request-input>
+    </sdncadapterworkflow:SDNCRequestData>
+    </sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
 
         logger.debug("sdncRequest:  " + sdncRequest)
         return sdncRequest
     }
 
+
+    String buildDefaultVnfInputParams(String vnfName) {
+        String res =
+                """<vnf-input-parameters>
+                      <param>
+                          <name>${MsoUtils.xmlEscape(vnfName)}</name>
+                      </param>
+                   </vnf-input-parameters>"""
+
+        return res
+    }
+
     String buildSDNCParamsXml(DelegateExecution execution) {
         String params = ""
         StringBuilder sb = new StringBuilder()
@@ -241,19 +253,19 @@ class TnNssmfUtils {
     }
 
     String getExecutionInputParams(DelegateExecution execution) {
-        String res = "msoRequestId=" + execution.getVariable("msoRequestId") +
-                ", modelInvariantUuid=" + execution.getVariable("modelInvariantUuid") +
-                ", modelUuid=" + execution.getVariable("modelUuid") +
-                ", serviceInstanceID=" + execution.getVariable("serviceInstanceID") +
-                ", operationType=" + execution.getVariable("operationType") +
-                ", globalSubscriberId=" + execution.getVariable("globalSubscriberId") +
-                ", dummyServiceId=" + execution.getVariable("dummyServiceId") +
-                ", nsiId=" + execution.getVariable("nsiId") +
-                ", networkType=" + execution.getVariable("networkType") +
-                ", subscriptionServiceType=" + execution.getVariable("subscriptionServiceType") +
-                ", jobId=" + execution.getVariable("jobId") +
-                ", sliceParams=" + execution.getVariable("sliceParams") +
-                ", servicename=" + execution.getVariable("servicename")
+        String res = "\n msoRequestId=" + execution.getVariable("msoRequestId") +
+                "\n modelInvariantUuid=" + execution.getVariable("modelInvariantUuid") +
+                "\n modelUuid=" + execution.getVariable("modelUuid") +
+                "\n serviceInstanceID=" + execution.getVariable("serviceInstanceID") +
+                "\n operationType=" + execution.getVariable("operationType") +
+                "\n globalSubscriberId=" + execution.getVariable("globalSubscriberId") +
+                "\n dummyServiceId=" + execution.getVariable("dummyServiceId") +
+                "\n nsiId=" + execution.getVariable("nsiId") +
+                "\n networkType=" + execution.getVariable("networkType") +
+                "\n subscriptionServiceType=" + execution.getVariable("subscriptionServiceType") +
+                "\n jobId=" + execution.getVariable("jobId") +
+                "\n sliceParams=" + execution.getVariable("sliceParams") +
+                "\n servicename=" + execution.getVariable("servicename")
 
         return res
     }
@@ -297,7 +309,6 @@ class TnNssmfUtils {
     void attachLogicalLinkToAllottedResource(DelegateExecution execution, String aaiVersion, AAIResourceUri arUri,
                                              String logicalLinkId) {
 
-
         String toLink = "aai/${aaiVersion}/network/logical-links/logical-link/${logicalLinkId}"
 
         Relationship relationship = new Relationship()
@@ -307,4 +318,18 @@ class TnNssmfUtils {
 
         createRelationShipInAAI(execution, arUri, relationship)
     }
+
+    void attachNetworkPolicyToAllottedResource(DelegateExecution execution, String aaiVersion,
+                                               AAIResourceUri aaiResourceUri, String networkPolicyId) {
+
+        String toLink = "aai/${aaiVersion}/network/network-policies/network-policy/${networkPolicyId}"
+
+        Relationship relationship = new Relationship()
+        relationship.setRelatedLink(toLink)
+        relationship.setRelatedTo("network-policy")
+        relationship.setRelationshipLabel("org.onap.relationships.inventory.Uses")
+
+        createRelationShipInAAI(execution, aaiResourceUri, relationship)
+
+    }
 }
index 55adbe3..fefa022 100644 (file)
@@ -21,9 +21,9 @@ def dcsi = new DoCreateTnNssiInstance()
 dcsi.createServiceInstance(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="SequenceFlow_1uiz85h" sourceRef="Activity_16luyg1" targetRef="Event_1rsf7yb" />
-    <bpmn:sequenceFlow id="SequenceFlow_0g5bwvl" sourceRef="instantiate_NSTask" targetRef="Activity_08tw2di" />
+    <bpmn:sequenceFlow id="SequenceFlow_0g5bwvl" sourceRef="instantiate_NSTask" targetRef="ScriptTask_18rzwzb" />
     <bpmn:scriptTask id="ScriptTask_18rzwzb" name="Create Allottedsource in AAI" scriptFormat="groovy">
-      <bpmn:incoming>Flow_106ei42</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0g5bwvl</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_17u69c4</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def dcsi = new DoCreateTnNssiInstance()
@@ -74,14 +74,6 @@ dcsi.validateSDNCResponse(execution, response, "allocate")</bpmn:script>
       <bpmn:incoming>SequenceFlow_17u69c4</bpmn:incoming>
       <bpmn:linkEventDefinition id="LinkEventDefinition_1skl6p7" name="SdncOperation" />
     </bpmn:intermediateThrowEvent>
-    <bpmn:scriptTask id="Activity_08tw2di" name="create Slice Profile in AAI" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_0g5bwvl</bpmn:incoming>
-      <bpmn:outgoing>Flow_106ei42</bpmn:outgoing>
-      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateTnNssiInstance()
-dcsi.createSliceProfile(execution)</bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:sequenceFlow id="Flow_106ei42" sourceRef="Activity_08tw2di" targetRef="ScriptTask_18rzwzb" />
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoCreateTnNssiInstance">
@@ -98,12 +90,12 @@ dcsi.createSliceProfile(execution)</bpmn:script>
         <di:waypoint x="299" y="375" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_17u69c4_di" bpmnElement="SequenceFlow_17u69c4">
-        <di:waypoint x="930" y="129" />
-        <di:waypoint x="1102" y="129" />
+        <di:waypoint x="830" y="129" />
+        <di:waypoint x="982" y="129" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0g5bwvl_di" bpmnElement="SequenceFlow_0g5bwvl">
-        <di:waypoint x="574" y="129" />
-        <di:waypoint x="650" y="129" />
+        <di:waypoint x="600" y="129" />
+        <di:waypoint x="730" y="129" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1uiz85h_di" bpmnElement="SequenceFlow_1uiz85h">
         <di:waypoint x="840" y="375" />
@@ -113,37 +105,25 @@ dcsi.createSliceProfile(execution)</bpmn:script>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0khtova_di" bpmnElement="SequenceFlow_0khtova">
-        <di:waypoint x="393" y="129" />
-        <di:waypoint x="474" y="129" />
+        <di:waypoint x="410" y="129" />
+        <di:waypoint x="500" y="129" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="436" y="108" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1qo2pln_di" bpmnElement="SequenceFlow_1qo2pln">
         <di:waypoint x="211" y="129" />
-        <di:waypoint x="251" y="129" />
-        <di:waypoint x="251" y="129" />
-        <di:waypoint x="293" y="129" />
+        <di:waypoint x="310" y="129" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="266" y="123" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_106ei42_di" bpmnElement="Flow_106ei42">
-        <di:waypoint x="750" y="129" />
-        <di:waypoint x="830" y="129" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="allocateTnNssi_StartEvent">
         <dc:Bounds x="175" y="111" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="153" y="147" width="86" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_03j6ogo_di" bpmnElement="PreprocessIncomingRequest_task">
-        <dc:Bounds x="293" y="89" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1qmmew8_di" bpmnElement="instantiate_NSTask">
-        <dc:Bounds x="474" y="89" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Event_0l9vk9p_di" bpmnElement="Event_0l9vk9p">
         <dc:Bounds x="175" y="357" width="36" height="36" />
         <bpmndi:BPMNLabel>
@@ -163,16 +143,19 @@ dcsi.createSliceProfile(execution)</bpmn:script>
         <dc:Bounds x="972" y="357" width="36" height="36" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Event_1a9swwa_di" bpmnElement="Event_1a9swwa">
-        <dc:Bounds x="1102" y="111" width="36" height="36" />
+        <dc:Bounds x="982" y="111" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1093" y="154" width="59" height="27" />
+          <dc:Bounds x="973" y="154" width="59" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_18rzwzb_di" bpmnElement="ScriptTask_18rzwzb">
-        <dc:Bounds x="830" y="89" width="100" height="80" />
+        <dc:Bounds x="730" y="89" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_08tw2di_di" bpmnElement="Activity_08tw2di">
-        <dc:Bounds x="650" y="89" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_1qmmew8_di" bpmnElement="instantiate_NSTask">
+        <dc:Bounds x="500" y="89" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_03j6ogo_di" bpmnElement="PreprocessIncomingRequest_task">
+        <dc:Bounds x="310" y="89" width="100" height="80" />
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>