Changed parsing code in DoDeleteVfModuleFromVnf 75/23175/3
authorJim Hahn <jrh3@att.com>
Fri, 10 Nov 2017 22:01:00 +0000 (17:01 -0500)
committerJim Hahn <jrh3@att.com>
Sat, 11 Nov 2017 18:41:28 +0000 (13:41 -0500)
Modified code to use MsoUtils to parse the xml rather than walking the
nodes generated by documentBuilder.
Added check for missing vfModuleOutputs.
Added MsoUtils.getMultNodeObjects() to return real Node objects instead
of lazy nodes.

Change-Id: I0266502f1e0353c778dce982fa55cf7ce944d91e
Issue-Id: SO-333
Signed-off-by: Jim Hahn <jrh3@att.com>
bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/MsoUtils.groovy
bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVfModuleFromVnf.groovy

index 94b4236..0699245 100644 (file)
@@ -59,6 +59,21 @@ class MsoUtils {
                }\r
                return nodes\r
        }\r
+       /**\r
+        * Note: this uses XmlParser instead of XmlSlurper, thus it is not as\r
+        * efficient because it instantiates the whole DOM tree.\r
+        * @param xmlInput\r
+        * @param element\r
+        * @return a list of Nodes, or {@code null} if <i>xmlInput</i> is {@code null}\r
+        */\r
+       def getMultNodeObjects(xmlInput, element){\r
+               def nodes=null\r
+               if(xmlInput!=null){\r
+                       def xml= new XmlParser().parseText(xmlInput)\r
+                       nodes = xml.'**'.findAll{ node-> node.name() == element }\r
+               }\r
+               return nodes\r
+       }\r
        def getNodeText1(xmlInput,element){\r
                def rtn=null\r
                if(xmlInput!=null){\r
index 4166343..9d9f0bb 100644 (file)
@@ -19,6 +19,7 @@ import org.springframework.web.util.UriUtils
 import org.w3c.dom.Document\r
 import org.w3c.dom.Element\r
 import org.xml.sax.InputSource\r
+import static org.apache.commons.lang3.StringUtils.*\r
 \r
 public class DoDeleteVfModuleFromVnf extends VfModuleBase {\r
 \r
@@ -118,19 +119,10 @@ public class DoDeleteVfModuleFromVnf extends VfModuleBase {
                        utils.logAudit("DoDeleteVfModuleFromVnf: AAI endPoint  : " + endPoint)\r
 \r
                        try {\r
-                               RESTConfig config = new RESTConfig(endPoint);\r
-                               def responseData = ''\r
-                               def aaiRequestId = UUID.randomUUID().toString()\r
-                               RESTClient client = new RESTClient(config).\r
-                                       addHeader('X-TransactionId', aaiRequestId).\r
-                                       addHeader('X-FromAppId', 'MSO').\r
-                                       addHeader('Content-Type', 'application/xml').\r
-                                       addHeader('Accept','application/xml');\r
-                               logDebug('sending GET to AAI endpoint \'' + endPoint + '\'', isDebugLogEnabled)\r
-                               APIResponse response = client.httpGet()\r
                                utils.logAudit("DoDeleteVfModuleFromVnf: - invoking httpGet to AAI")\r
+                               APIResponse response = aaiUriUtil.executeAAIGetCall(execution, endPoint)\r
 \r
-                               responseData = response.getResponseBodyAsString()\r
+                               def responseData = response.getResponseBodyAsString()\r
                                execution.setVariable('DDVMFV_getVnfResponseCode', response.getStatusCode())\r
                                execution.setVariable('DDVMFV_getVnfResponse', responseData)\r
 \r
@@ -416,37 +408,28 @@ public class DoDeleteVfModuleFromVnf extends VfModuleBase {
                                execution.setVariable("DDVFMV_vnfVfModuleDeleteCompleted", true)\r
 \r
                                // Parse vnfOutputs for contrail network polcy FQDNs\r
-                               if (vnfResponse.contains("vfModuleOutputs")) {\r
-                                       def vfModuleOutputsXml = utils.getNodeXml(vnfResponse, "vfModuleOutputs")\r
-                                       InputSource source = new InputSource(new StringReader(vfModuleOutputsXml));\r
-                       DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();\r
-                       docFactory.setNamespaceAware(true)\r
-                       DocumentBuilder docBuilder = docFactory.newDocumentBuilder()\r
-                       Document outputsXml = docBuilder.parse(source)\r
-\r
-                                       NodeList entries = outputsXml.getElementsByTagNameNS("*", "entry")\r
+                               def vfModuleOutputsXml = utils.getNodeXml(vnfResponse, "vfModuleOutputs")\r
+                               if(!isBlank(vfModuleOutputsXml)) {\r
+                                       vfModuleOutputsXml = utils.removeXmlNamespaces(vfModuleOutputsXml)\r
                                        List contrailNetworkPolicyFqdnList = []\r
-                                       for (int i = 0; i< entries.getLength(); i++) {\r
-                                               Node node = entries.item(i)\r
-                                               if (node.getNodeType() == Node.ELEMENT_NODE) {\r
-                                                       Element element = (Element) node\r
-                                                       String key = element.getElementsByTagNameNS("*", "key").item(0).getTextContent()\r
-                                                       if (key.endsWith("contrail_network_policy_fqdn")) {\r
-                                                               String contrailNetworkPolicyFqdn = element.getElementsByTagNameNS("*", "value").item(0).getTextContent()\r
-                                                               logDebug("Obtained contrailNetworkPolicyFqdn: " + contrailNetworkPolicyFqdn, isDebugLogEnabled)\r
-                                                               contrailNetworkPolicyFqdnList.add(contrailNetworkPolicyFqdn)\r
-                                                       }\r
-                                                       else if (key.equals("oam_management_v4_address")) {\r
-                                                               String oamManagementV4Address = element.getElementsByTagNameNS("*", "value").item(0).getTextContent()\r
-                                                               logDebug("Obtained oamManagementV4Address: " + oamManagementV4Address, isDebugLogEnabled)\r
-                                                               execution.setVariable(Prefix + "oamManagementV4Address", oamManagementV4Address)\r
-                                                       }\r
-                                                       else if (key.equals("oam_management_v6_address")) {\r
-                                                               String oamManagementV6Address = element.getElementsByTagNameNS("*", "value").item(0).getTextContent()\r
-                                                               logDebug("Obtained oamManagementV6Address: " + oamManagementV6Address, isDebugLogEnabled)\r
-                                                               execution.setVariable(Prefix + "oamManagementV6Address", oamManagementV6Address)\r
-                                                       }\r
-\r
+                                       for(Node node: utils.getMultNodeObjects(vfModuleOutputsXml, "entry")) {\r
+                                               String key = utils.getChildNodeText(node, "key")\r
+                                               if(key == null) {\r
+                                                       \r
+                                               } else if (key.endsWith("contrail_network_policy_fqdn")) {\r
+                                                       String contrailNetworkPolicyFqdn = utils.getChildNodeText(node, "value")\r
+                                                       logDebug("Obtained contrailNetworkPolicyFqdn: " + contrailNetworkPolicyFqdn, isDebugLogEnabled)\r
+                                                       contrailNetworkPolicyFqdnList.add(contrailNetworkPolicyFqdn)\r
+                                               }\r
+                                               else if (key.equals("oam_management_v4_address")) {\r
+                                                       String oamManagementV4Address = utils.getChildNodeText(node, "value")\r
+                                                       logDebug("Obtained oamManagementV4Address: " + oamManagementV4Address, isDebugLogEnabled)\r
+                                                       execution.setVariable(Prefix + "oamManagementV4Address", oamManagementV4Address)\r
+                                               }\r
+                                               else if (key.equals("oam_management_v6_address")) {\r
+                                                       String oamManagementV6Address = utils.getChildNodeText(node, "value")\r
+                                                       logDebug("Obtained oamManagementV6Address: " + oamManagementV6Address, isDebugLogEnabled)\r
+                                                       execution.setVariable(Prefix + "oamManagementV6Address", oamManagementV6Address)\r
                                                }\r
                                        }\r
                                        if (!contrailNetworkPolicyFqdnList.isEmpty()) {\r