Merge "Bug 7933: NPE when posting using XML"
authorTomas Cere <tcere@cisco.com>
Tue, 23 May 2017 10:43:13 +0000 (10:43 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 23 May 2017 10:43:13 +0000 (10:43 +0000)
restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlNormalizedNodeBodyReader.java
restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/jersey/providers/XmlNormalizedNodeBodyReader.java

index e8fabe5638f70d26f1124c7fa02a97c44e66b601..36b834ab867ccd38a02d55864df02b43aadc8dfe 100644 (file)
@@ -45,6 +45,7 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
@@ -147,19 +148,21 @@ public class XmlNormalizedNodeBodyReader extends AbstractIdentifierAwareJaxRsPro
             }
         }
 
-        NormalizedNode<?, ?> parsed = null;
-
+        final NormalizedNode<?, ?> parsed;
         if (schemaNode instanceof ContainerSchemaNode) {
-            parsed = parserFactory.getContainerNodeParser().parse(Collections.singletonList(doc.getDocumentElement()),
-                    (ContainerSchemaNode) schemaNode);
+            parsed = parserFactory.getContainerNodeParser().parse(
+                        Collections.singletonList(doc.getDocumentElement()), (ContainerSchemaNode) schemaNode);
         } else if (schemaNode instanceof ListSchemaNode) {
-            final ListSchemaNode casted = (ListSchemaNode) schemaNode;
-            parsed = parserFactory.getMapEntryNodeParser().parse(elements, casted);
+            parsed = parserFactory.getMapEntryNodeParser().parse(elements, (ListSchemaNode) schemaNode);
             if (isPost()) {
                 iiToDataList.add(parsed.getIdentifier());
             }
+        } else if (schemaNode instanceof LeafSchemaNode) {
+            parsed = parserFactory.getLeafNodeParser().parse(elements, (LeafSchemaNode) schemaNode);
+        } else {
+            LOG.warn("Unknown schema node extension {} was not parsed", schemaNode.getClass());
+            parsed = null;
         }
-        // FIXME : add another DataSchemaNode extensions e.g. LeafSchemaNode
 
         final YangInstanceIdentifier fullIIToData = YangInstanceIdentifier.create(Iterables.concat(
                 pathContext.getInstanceIdentifier().getPathArguments(), iiToDataList));
index c8c9cf208001b8f97dbb06325ed9653715bc3fa3..a76fe93e5479b819a7d29a1e935e5cf171b1f3d4 100644 (file)
@@ -40,6 +40,7 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
@@ -112,17 +113,20 @@ public class XmlNormalizedNodeBodyReader extends AbstractNormalizedNodeBodyReade
             }
         }
 
-        NormalizedNode<?, ?> parsed = null;
-
+        final NormalizedNode<?, ?> parsed;
         if (schemaNode instanceof ContainerSchemaNode) {
-            parsed = parserFactory.getContainerNodeParser().parse(Collections.singletonList(doc.getDocumentElement()),
-                (ContainerSchemaNode) schemaNode);
+            parsed = parserFactory.getContainerNodeParser().parse(
+                    Collections.singletonList(doc.getDocumentElement()), (ContainerSchemaNode) schemaNode);
         } else if (schemaNode instanceof ListSchemaNode) {
-            final ListSchemaNode casted = (ListSchemaNode) schemaNode;
-            parsed = parserFactory.getMapEntryNodeParser().parse(elements, casted);
+            parsed = parserFactory.getMapEntryNodeParser().parse(elements, (ListSchemaNode) schemaNode);
             if (isPost()) {
                 iiToDataList.add(parsed.getIdentifier());
             }
+        } else if (schemaNode instanceof LeafSchemaNode) {
+            parsed = parserFactory.getLeafNodeParser().parse(elements, (LeafSchemaNode) schemaNode);
+        } else {
+            LOG.warn("Unknown schema node extension {} was not parsed", schemaNode.getClass());
+            parsed = null;
         }
 
         final YangInstanceIdentifier fullIIToData = YangInstanceIdentifier.create(Iterables.concat(