Bug 3834 - Unhelpful error messages when parsing 35/23435/2
authorJan Hajnar <jhajnar@cisco.com>
Mon, 22 Jun 2015 12:53:04 +0000 (14:53 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 2 Jul 2015 11:37:35 +0000 (11:37 +0000)
incorrect instance identifier in payload

* added custom exception when xpath argument ends with slash (before it
threw string out of bounds exception)
* added null check in DataSchemaContextNode so unknown qname for child
node does not crash on null pointer exception

Change-Id: Ie8db9c3cc1726dd73306437cb4eebb24f88eb5d9
Signed-off-by: Jan Hajnar <jhajnar@cisco.com>
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataSchemaContextNode.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/XpathStringParsingPathArgumentBuilder.java

index 1d8e133c79deaad16d9117cfe9cb1c8d44b50214..8db4e0c21d0b3fd77f8d0bdcece1defbf1c6df9c 100644 (file)
@@ -99,7 +99,7 @@ public abstract class DataSchemaContextNode<T extends PathArgument> implements I
     static DataSchemaContextNode<?> fromSchemaAndQNameChecked(final DataNodeContainer schema, final QName child) {
         DataSchemaNode result = findChildSchemaNode(schema, child);
         // We try to look up if this node was added by augmentation
-        if ((schema instanceof DataSchemaNode) && result.isAugmenting()) {
+        if (result != null && (schema instanceof DataSchemaNode) && result.isAugmenting()) {
             return fromAugmentation(schema, (AugmentationTarget) schema, result);
         }
         return fromDataSchemaNode(result);
index 5bf9611492bb6575cbcfff8def3d671165a2b37d..2d1de449122cc4209ea5fc58990d59cb5d8301cf 100644 (file)
@@ -92,9 +92,9 @@ class XpathStringParsingPathArgumentBuilder implements Builder<Iterable<PathArgu
     }
 
     private PathArgument computeNextArgument() {
-        checkValid(SLASH  == currentChar(),"Identifier must start with '/'.");
+        checkValid(SLASH == currentChar(), "Identifier must start with '/'.");
         skipCurrentChar();
-
+        checkValid(!allCharactersConsumed(), "Identifier cannot end with '/'.");
         QName name = nextQName();
         if(allCharactersConsumed() || SLASH == currentChar()) {
             return computeIdentifier(name);