From 3b0ec16489c4868dd8d409435455b6741cca70a4 Mon Sep 17 00:00:00 2001 From: Ivan Hrasko Date: Tue, 23 May 2017 14:24:11 +0200 Subject: [PATCH] Bug 7933: NPE when posting using XML - NPE was thrown because leaf value was not parsed, thus data value was null - fixed by adding condition to parse leaf nodes - log warning when unknown schema node type was not parsed - fixed in old and new restconf Change-Id: I13c8e419e35999980548e09f6963b0d407a45b31 Signed-off-by: Ivan Hrasko --- .../rest/impl/XmlNormalizedNodeBodyReader.java | 18 +++++++++++------- .../providers/XmlNormalizedNodeBodyReader.java | 18 +++++++++++------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlNormalizedNodeBodyReader.java b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlNormalizedNodeBodyReader.java index bc1eeeae50..536b4c3b54 100644 --- a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlNormalizedNodeBodyReader.java +++ b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/XmlNormalizedNodeBodyReader.java @@ -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; @@ -146,18 +147,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); - } else if(schemaNode instanceof ListSchemaNode) { - final ListSchemaNode casted = (ListSchemaNode) schemaNode; - parsed = parserFactory.getMapEntryNodeParser().parse(elements, casted); + parsed = parserFactory.getContainerNodeParser().parse( + Collections.singletonList(doc.getDocumentElement()), (ContainerSchemaNode) schemaNode); + } else if (schemaNode instanceof ListSchemaNode) { + 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)); diff --git a/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/jersey/providers/XmlNormalizedNodeBodyReader.java b/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/jersey/providers/XmlNormalizedNodeBodyReader.java index 507f4f362a..c304cc6a75 100644 --- a/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/jersey/providers/XmlNormalizedNodeBodyReader.java +++ b/restconf/sal-rest-connector/src/main/java/org/opendaylight/restconf/jersey/providers/XmlNormalizedNodeBodyReader.java @@ -46,6 +46,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; @@ -134,17 +135,20 @@ 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); - } else if(schemaNode instanceof ListSchemaNode) { - final ListSchemaNode casted = (ListSchemaNode) schemaNode; - parsed = parserFactory.getMapEntryNodeParser().parse(elements, casted); + parsed = parserFactory.getContainerNodeParser().parse( + Collections.singletonList(doc.getDocumentElement()), (ContainerSchemaNode) schemaNode); + } else if (schemaNode instanceof ListSchemaNode) { + 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( -- 2.36.6