update DoCreateSliceServiceOption script because the oof inteface modify 02/107602/3
authorhetengjiao <hetengjiao@chinamobile.com>
Wed, 13 May 2020 04:20:57 +0000 (12:20 +0800)
committerHE TENGJIAO <hetengjiao@chinamobile.com>
Wed, 13 May 2020 10:27:47 +0000 (10:27 +0000)
Issue-ID: SO-2919

Change-Id: Ia8643a701f30ffa491842a3b7e35e18413b8d702
Signed-off-by: hetengjiao <hetengjiao@chinamobile.com>
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy
common/src/main/java/org/onap/so/beans/nsmf/SliceTaskParams.java

index 8ab7c7a..0b9bcde 100644 (file)
@@ -1,13 +1,9 @@
 package org.onap.so.bpmn.infrastructure.scripts
 
 import com.fasterxml.jackson.core.type.TypeReference
-import groovy.json.JsonBuilder
+import com.fasterxml.jackson.databind.ObjectMapper
 import groovy.json.JsonSlurper
-import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
-import org.onap.aai.domain.yang.Relationship
-import org.onap.aai.domain.yang.RelationshipList
-import org.onap.aai.domain.yang.ServiceInstance
 import org.onap.logging.filter.base.ONAPComponents
 import org.onap.so.beans.nsmf.SliceTaskParams
 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
@@ -24,8 +20,6 @@ import org.onap.aaiclient.client.aai.AAIResourcesClient
 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
-import org.onap.so.db.request.client.RequestsDbClient
-import org.onap.so.db.request.beans.OrchestrationTask
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 import javax.ws.rs.NotFoundException
@@ -37,44 +31,31 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
 
     private static final Logger logger = LoggerFactory.getLogger( DoCreateSliceServiceOption.class)
 
-
     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
     JsonUtils jsonUtil = new JsonUtils()
 
-    RequestsDbClient requestsDbClient = new RequestsDbClient()
-
     OofUtils oofUtils = new OofUtils()
 
-    /**
-     * Pre Process the BPMN Flow Request
-     * Inclouds:
-     * generate the nsOperationKey
-     * generate the nsParameters
-     */
-    void preProcessRequest (DelegateExecution execution) {
-        String msg = ""
-        logger.trace("Enter preProcessRequest()")
-        String taskID = execution.getVariable("taskID")
-        Boolean isSharable = true
-        String resourceSharingLevel = execution.getVariable("resourceSharingLevel")
-        if (resourceSharingLevel.equals("shared"))
-            isSharable = true
-        execution.setVariable("isSharable",isSharable)
-        logger.trace("Exit preProcessRequest")
+    ObjectMapper objectMapper = new ObjectMapper()
 
+    void preProcessRequest (DelegateExecution execution) {
     }
 
 
     void getNSIOptionfromOOF(DelegateExecution execution) {
 
+        //解析sliceProfile
+        logger.debug("start parseServiceProfile")
+        parseServiceProfile(execution)
+        logger.debug("end parseServiceProfile")
+
         String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
         logger.debug( "get NSI option OOF Url: " + urlString)
+
         boolean isNSISuggested = true
         execution.setVariable("isNSISuggested",isNSISuggested)
-        String nsiInstanceId = ""
-        String nsiName = ""
-        SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
+
         //Prepare auth for OOF - Begin
         def authHeader = ""
         String basicAuth = UrnPropertiesReader.getVariable("mso.oof.auth", execution)
@@ -100,117 +81,127 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
 
         String requestId = execution.getVariable("msoRequestId")
         Map<String, Object> profileInfo = execution.getVariable("serviceProfile")
-        String nstModelUuid = execution.getVariable("nstModelUuid")
-        String nstModelInvariantUuid = execution.getVariable("nstModelInvariantUuid")
-        String nstInfo = """"NSTInfo" : {
-        "invariantUUID":"${nstModelInvariantUuid}",
-        "UUID":"${nstModelUuid}"
+        Map<String, Object> nstSolution = execution.getVariable("nstSolution")
+        logger.debug("Get NST selection from OOF: " + nstSolution.toString())
+        String nstInfo = """{
+            "modelInvariantId":"${nstSolution.invariantUUID}",
+            "modelVersionId":"${nstSolution.UUID}",
+            "modelName":"${nstSolution.NSTName}"
          }"""
 
-        String oofRequest = oofUtils.buildSelectNSIRequest(execution, requestId, nstInfo, profileInfo)
+        String oofRequest = oofUtils.buildSelectNSIRequest(requestId, nstInfo, profileInfo)
+        logger.debug("Sending request to OOF: " + oofRequest)
 
         //send request to get NSI option - Begin
-        URL url = new URL(urlString+"/api/oof/v1/selectnsi")
+        URL url = new URL(urlString+"/api/oof/selection/nsi/v1")
         HttpClient httpClient = new HttpClientFactory().newJsonClient(url, ONAPComponents.OOF)
         httpClient.addAdditionalHeader("Authorization", authHeader)
         Response httpResponse = httpClient.post(oofRequest)
 
+        processOOFResponse(httpResponse, execution)
+    }
+
+    private void processOOFResponse(Response httpResponse, DelegateExecution execution) {
         int responseCode = httpResponse.getStatus()
         logger.debug("OOF sync response code is: " + responseCode)
 
-        if(responseCode != 200){
+        if (responseCode != 200) {
             exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from OOF.")
-            logger.debug("Info: No NSI suggested by OOF" )
+            logger.debug("Info: No NSI suggested by OOF")
         }
 
-        if(httpResponse.hasEntity()){
+        SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
+        if (httpResponse.hasEntity()) {
             String OOFResponse = httpResponse.readEntity(String.class)
+            logger.debug("NSI OOFResponse is: " + OOFResponse)
             execution.setVariable("OOFResponse", OOFResponse)
-            int index = 0   //This needs to be changed to derive a value when we add policy to decide the solution options.
+            int index = 0
+            //This needs to be changed to derive a value when we add policy to decide the solution options.
             Map OOFResponseObject = new JsonSlurper().parseText(OOFResponse)
-            if(execution.getVariable("isSharable" )  == true && OOFResponseObject.get("solutions").containsKey("sharedNSIsolutions")) {
-                nsiInstanceId = OOFResponseObject.get("solutions").get("sharedNSIsolutions").get(0).get("NSISolution").NSIId
-                nsiName = OOFResponseObject.get("solutions").get("sharedNSIsolutions").get(0).get("NSISolution").NSIName
-                sliceTaskParams.setNstId(nsiInstanceId)
-                sliceTaskParams.setSuggestNsiName(nsiName)
-                execution.setVariable("nsiInstanceId",nsiInstanceId)
-                execution.setVariable("nsiName",nsiName)
-            }else {
-                if(OOFResponseObject.get("solutions").containsKey("newNSISolutions")) {
-                    List NSSImap = OOFResponseObject.get("solutions").get("newNSISolutions").get(index).get("NSSISolutions")
-                    for(Map nssi :  NSSImap) {
-                        String nssiName = nssi.get("NSSISolution").NSSIName
-                        String nssiId = nssi.get("NSSISolution").NSSIId
-                        String domain = nssi.get("NSSISolution").domain.toUpperCase()
-                        switch (domain) {
-                            case "AN":
-                                sliceTaskParams.setAnSuggestNssiId(nssiId)
-                                sliceTaskParams.setAnSuggestNssiName(nssiName)
-                                break;
-                            case "CN":
-                                sliceTaskParams.setCnSuggestNssiId(nssiId)
-                                sliceTaskParams.setCnSuggestNssiName(nssiName)
-                                break;
-                            case "TN":
-                                sliceTaskParams.setTnSuggestNssiId(nssiId)
-                                sliceTaskParams.setTnSuggestNssiName(nssiName)
-                                break;
-                            default:
-                                break;
+            Map solutions = OOFResponseObject.get("solutions")
+
+            Boolean isSharable = false
+            String resourceSharingLevel = execution.getVariable("resourceSharingLevel")
+            if (resourceSharingLevel.equals("shared"))
+                isSharable = true
+
+            if (solutions != null) {
+                if (isSharable) {
+                    //sharedNSISolution
+                    processSharedNSISolutions(solutions, execution)
+                } else {
+                    //TODO test OOF don't implement in Frankfurt release
+                    if (solutions.containsKey("newNSISolutions")) {
+                        List<Map> newNSISolutions = solutions.get("newNSISolutions")
+                        List<Map> NSSImap = new ArrayList<>()
+                        if (newNSISolutions != null && newNSISolutions.size() > 0) {
+                            NSSImap = newNSISolutions.get(index).get("NSSISolutions") as List<Map>
+                        }
+                        for (Map nssi : NSSImap) {
+                            def nssiSolution = nssi.get("NSSISolution") as Map<String, ?>
+                            String nssiName = nssiSolution.getOrDefault("NSSIName", "")
+                            String nssiId = nssiSolution.getOrDefault("NSSIId", "")
+                            String domain = nssiSolution.getOrDefault("domainName", "").toString().toUpperCase()
+                            switch (domain) {
+                                case "AN":
+                                    sliceTaskParams.setAnSuggestNssiId(nssiId)
+                                    sliceTaskParams.setAnSuggestNssiName(nssiName)
+                                    break
+                                case "CN":
+                                    sliceTaskParams.setCnSuggestNssiId(nssiId)
+                                    sliceTaskParams.setCnSuggestNssiName(nssiName)
+                                    break
+                                case "TN":
+                                    sliceTaskParams.setTnSuggestNssiId(nssiId)
+                                    sliceTaskParams.setTnSuggestNssiName(nssiName)
+                                    break
+                                default:
+                                    break
+                            }
                         }
+                        //TODO sliceProfile
                     }
                 }
-
             }
             execution.setVariable("sliceTaskParams", sliceTaskParams)
-            logger.debug("Info: No NSI suggested by OOF" )
+            logger.debug("Info: No NSI suggested by OOF")
         }
-        //send request to get NSI option - Begin
-
+        logger.debug("*** Completed options Call to OOF ***")
+    }
 
-        //send request to get NSI service Info - Begin
-
-        /***
-         * Need to check whether its needed.
-         */
-//            logger.debug("Begin to query OOF suggetsed NSI from AAI ")
-//            if(isBlank(nsiInstanceId)){
-//                isNSISuggested = false
-//                execution.setVariable("isNSISuggested",isNSISuggested)
-//            }else
-//            {
-//                try {
-//                    String globalSubscriberId = execution.getVariable('globalSubscriberId')
-//                    String serviceType = execution.getVariable('subscriptionServiceType')
-//                    AAIResourcesClient resourceClient = new AAIResourcesClient()
-//                    AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalSubscriberId, serviceType, nsiInstanceId)
-//                    AAIResultWrapper wrapper = resourceClient.get(serviceInstanceUri, NotFoundException.class)
-//                    Optional<org.onap.aai.domain.yang.ServiceInstance> si = wrapper.asBean(org.onap.aai.domain.yang.ServiceInstance.class)
-//                    org.onap.aai.domain.yang.ServiceInstance nsiServiceInstance = si.get()
-//                    execution.setVariable("nsiServiceInstance",nsiServiceInstance)
-//                    isNSISuggested = true
-//                    execution.setVariable("isNSISuggested",isNSISuggested)
-//                    SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
-//                    sliceTaskParams.setSuggestNsiId(nsiInstanceId)
-//                    sliceTaskParams.setSuggestNsiName(si.get().getServiceInstanceName())
-//                    execution.setVariable("sliceTaskParams", sliceTaskParams)
-//                    logger.debug("Info: NSI suggested by OOF exist in AAI ")
-//                }catch(BpmnError e) {
-//                    throw e
-//                }catch(Exception ex) {
-//                    String msg = "Internal Error in getServiceInstance: " + ex.getMessage()
-//                    //exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-//                    logger.debug("Info: NSI suggested by OOF doesnt exist in AAI " + nsiInstanceId)
-//                }
-//            }
-        //send request to get NSI service Info - End
-        //${OrchestrationTaskHandler.createOrchestrationTask(execution.getVariable("OrchestrationTask"))}
-        logger.debug( "*** Completed options Call to OOF ***")
+    private void processSharedNSISolutions(Map solutions, DelegateExecution execution) {
+        if (!solutions.containsKey("sharedNSISolutions"))
+        {
+            logger.error("OOF don't return sharedNSISolutions")
+            return
+        }
+        String nsiName, nsiInstanceId, nssiId, nssiName
+        Map sliceProfile
+        SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
 
+        Map sharedNSIsolution = ((List) solutions.get("sharedNSISolutions")).get(0)
+        nsiInstanceId = sharedNSIsolution.getOrDefault("NSIId", "")
+        nsiName = sharedNSIsolution.getOrDefault("NSIName", "")
+        sliceTaskParams.setNstId(nsiInstanceId)
+        sliceTaskParams.setSuggestNsiName(nsiName)
+
+        //Temporary modification
+        List NSSIs = sharedNSIsolution.get("NSSIs")
+        if(NSSIs.size()==1){
+            Map nssi = NSSIs.get(0)
+            nssiId = nssi.getOrDefault("NSSIId","")
+            nssiName = nssi.getOrDefault("NSSIName","")
+            sliceTaskParams.setCnSuggestNssiId(nssiId)
+            sliceTaskParams.setCnSuggestNssiName(nssiName)
+            sliceProfile = ((List)nssi.get("sliceProfile"))?.get(0)
+//            execution.setVariable("sliceProfileCn", sliceProfile)
+//            sliceTaskParams.setSliceProfileCn(sliceProfile)
+        }
+        logger.debug("OOF sharedNSISolution nsiInstanceId:${nsiInstanceId}, nsiName:${nsiName}, nssiId:${nssiId}, nssiName:${nssiName}")
+        logger.debug("OOF SliceProfile:"+sliceProfile.toString())
     }
 
-
-    public void parseServiceProfile(DelegateExecution execution) {
+    void parseServiceProfile(DelegateExecution execution) {
         logger.debug("Start parseServiceProfile")
         String serviceType = execution.getVariable("serviceType")
         Map<String, Object> serviceProfile = execution.getVariable("serviceProfile")
@@ -230,9 +221,27 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
         logger.debug("Finish parseServiceProfile")
     }
 
-    public Map getSliceProfile(String serviceType, String domain, Map<String, Object> serviceProfile) {
-        String variablePath = "nsmf." + serviceType + ".profileMap" + domain
-        String profileMapStr = UrnPropertiesReader.getVariable(variablePath)
+    Map getSliceProfile(String serviceType, String domain, Map<String, Object> serviceProfile) {
+        //String variablePath = "nsmf." + serviceType + ".profileMap" + domain
+        //String profileMapStr = UrnPropertiesReader.getVariable(variablePath)
+        String profileMapStr = """ {
+            "skip_post_instantiation_configuration":"skip_post_instantiation_configuration", 
+            "controller_actor":"controller_actor", 
+            "areaTrafficCapDL":"areaTrafficCapDL", 
+            "maxNumberofUEs":"maxNumberofUEs", 
+            "latency":"latency", 
+            "expDataRateUL":"expDataRateUL", 
+            "sNSSAI":"sNSSAI", 
+            "plmnIdList":"plmnIdList", 
+            "sST":"sST", 
+            "areaTrafficCapUL":"areaTrafficCapUL", 
+            "uEMobilityLevel":"uEMobilityLevel", 
+            "expDataRateDL":"expDataRateDL", 
+            "coverageAreaTAList":"coverageAreaTAList", 
+            "activityFactor":"activityFactor", 
+            "resourceSharingLevel":"resourceSharingLevel"
+        }
+        """.trim().replaceAll(" ", "")
         logger.debug("Profile map for " + domain + " : " + profileMapStr)
         Map<String, String> profileMaps = objectMapper.readValue(profileMapStr, new TypeReference<Map<String, String>>(){})
         Map<String, Object> sliceProfileTn = [:]
@@ -243,92 +252,20 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
         return sliceProfileTn
     }
 
+    void processDecomposition(DelegateExecution execution){
+        logger.debug("Start processDecomposition")
 
-    void prepareNSSIList(DelegateExecution execution)
-    {
         ServiceDecomposition serviceDecomposition= execution.getVariable("serviceDecomposition")
-        List<String> nssiAssociated = new ArrayList<>()
-        Map<String, String> nssimap = new HashMap<>()
-        String nsiInstanceId=execution.getVariable("nsiInstanceId")
-        String globalSubscriberId = execution.getVariable("globalSubscriberId")
-        String serviceType = execution.getVariable("subscriptionServiceType")
-
-        try {
-
-            ServiceInstance si = execution.getVariable("nsiServiceInstance")
-            //List<Relationship> relationships = si.getRelationshipList().getRelationship().stream().filter(relation ->
-            //        relation.getRelatedTo().equalsIgnoreCase("service-instance"))
-            RelationshipList relationshipList = si.getRelationshipList()
-            List<Relationship> relationships = relationshipList.getRelationship()
-            for(Relationship relationship in relationships)
-            {
-                if(relationship.getRelatedTo().equalsIgnoreCase("service-instance"))
-                {
-                    String NSSIassociated = relationship.getRelatedLink().substring(relationship.getRelatedLink().lastIndexOf("/") + 1);
-                    if(!NSSIassociated.equals(nsiInstanceId))
-                        nssiAssociated.add(NSSIassociated)
-                }
-            }
-        }catch(BpmnError e) {
-            throw e
-        }catch(Exception ex) {
-            String msg = "Internal Error in getServiceInstance: " + ex.getMessage()
-            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-        }
-        Map<String, Object> params = execution.getVariable("params")
         SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
-        for(String nssiID in nssiAssociated)
-        {
-            try {
-                AAIResourcesClient resourceClient = new AAIResourcesClient()
-                AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalSubscriberId, serviceType, nssiID)
-                AAIResultWrapper wrapper = resourceClient.get(serviceInstanceUri, NotFoundException.class)
-                Optional<org.onap.aai.domain.yang.ServiceInstance> si = wrapper.asBean(org.onap.aai.domain.yang.ServiceInstance.class)
-                org.onap.aai.domain.yang.ServiceInstance nssi = si.get()
-
-                String domain = nssi.getEnvironmentContext().toString().toUpperCase()
-                switch (domain) {
-                    case "AN":
-                        sliceTaskParams.setAnSuggestNssiId(nssi.getServiceInstanceId())
-                        sliceTaskParams.setAnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
-                    case "CN":
-                        sliceTaskParams.setCnSuggestNssiId(nssi.getServiceInstanceId())
-                        sliceTaskParams.setCnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
-                    case "TN":
-                        sliceTaskParams.setTnSuggestNssiId(nssi.getServiceInstanceId())
-                        sliceTaskParams.setTnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
-                    default:
-                        break;
-                }
-            }catch(NotFoundException e)
-            {
-                logger.debug("NSSI Service Instance not found in AAI: " + nssiID)
-            }catch(Exception e)
-            {
-                logger.debug("NSSI Service Instance not found in AAI: " + nssiID)
-            }
-
-        }
         String nstName = serviceDecomposition.getModelInfo().getModelName()
         sliceTaskParams.setNstName(nstName)
         String nstId = serviceDecomposition.getModelInfo().getModelUuid()
         sliceTaskParams.setNstId(nstId)
-        execution.setVariable("sliceTaskParams",sliceTaskParams)
 
+        logger.debug("End processDecomposition")
     }
 
 
-    void updateOptionsInDB(DelegateExecution execution) {
-        logger.debug("Updating options with default value since not sharable : Begin ")
-        String taskID = execution.getVariable("taskID")
-        String params = execution.getVariable("params")
-        logger.debug("Updating options with default value since not sharable : End ")
-
-    }
-
     void prepareNSTDecompose(DelegateExecution execution) {
 
         String modelUuid = execution.getVariable("nstModelUuid")
@@ -364,14 +301,6 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
     }
 
 
-    void updateStatusInDB(DelegateExecution execution) {
-
-        String taskID = execution.getVariable("taskID")
-        //OrchestrationTask orchestrationTask = requestsDbClient.getNetworkSliceOption(taskID);
-        //orchestrationTask.setTaskStage("wait to confirm")
-        //requestsDbClient.updateNetworkSliceOption(orchestrationTask)
-    }
-
     void prepareNSSTlistfromNST(DelegateExecution execution) {
         //Need to update this part from decomposition.
         logger.trace("Enter prepareNSSTlistfromNST()")
@@ -400,7 +329,6 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
 
     }
 
-
     void getNSSTOption(DelegateExecution execution) {
         ServiceDecomposition serviceDecomposition= execution.getVariable("serviceDecomposition")
         String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
@@ -483,17 +411,17 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
                     case "AN":
                         sliceTaskParams.setAnSuggestNssiId(nssi.getServiceInstanceId())
                         sliceTaskParams.setAnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
+                        break
                     case "CN":
                         sliceTaskParams.setCnSuggestNssiId(nssi.getServiceInstanceId())
                         sliceTaskParams.setCnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
+                        break
                     case "TN":
                         sliceTaskParams.setTnSuggestNssiId(nssi.getServiceInstanceId())
                         sliceTaskParams.setTnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
+                        break
                     default:
-                        break;
+                        break
                 }
             }catch(NotFoundException e)
             {
@@ -503,21 +431,6 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
                 logger.debug("NSSI Service Instance not found in AAI: " + nssiInstanceId)
             }
         }
-
-
-        //Prepare send request to OOF - End
-
-//        String content = serviceDecomposition.getServiceInfo().getServiceArtifact().get(0).getContent()
-//        String nsstID = jsonUtil.getJsonValue(content, "metadata.id")
-//        String vendor = jsonUtil.getJsonValue(content, "metadata.vendor")
-//        String domain = jsonUtil.getJsonValue(content, "metadata.domainType")
-//        String type = jsonUtil.getJsonValue(content, "metadata.type")
-//        String nsstContentInfo = """{
-//        "NsstID":"${nsstID}",
-//        "Vendor":"${vendor}",
-//        "type":"${type}"
-//         }"""
-
         logger.debug("Prepare NSSI option completed ")
     }
 }
index bf881c0..f0857fc 100644 (file)
@@ -87,6 +87,13 @@ public class SliceTaskParams implements Serializable {
 
     private String anStatusDescription;
 
+    public SliceTaskParams() {
+        this.serviceProfile = new HashMap<>();
+        this.sliceProfileAn = new HashMap<>();
+        this.sliceProfileCn = new HashMap<>();
+        this.sliceProfileTn = new HashMap<>();
+    }
+
     public String getNstId() {
         return nstId;
     }