Add leaf context when value deserialization fails 79/33379/1
authorRobert Varga <robert.varga@pantheon.sk>
Fri, 22 Jan 2016 17:56:06 +0000 (18:56 +0100)
committerRobert Varga <nite@hq.sk>
Fri, 22 Jan 2016 17:58:29 +0000 (17:58 +0000)
When the codecs throw an IllegalArgumentException, it is useful to know
which leaf has failed to parse. Catch the exception and chain it to an
exception which gives more context.

Change-Id: I6466b5d86294a1f0116477081267a80c0a696bfb
Signed-off-by: Robert Varga <robert.varga@pantheon.sk>
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafNodeDomParser.java

index e059deadf9ea534880687d5e578cd36358749c91..6f32c13c1ca2d3fe80cfac2e30a6e59978d6bd09 100644 (file)
@@ -20,7 +20,6 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.w3c.dom.Element;
 
 final class LeafNodeDomParser extends LeafNodeBaseParser<Element> {
-
     private final XmlCodecProvider codecProvider;
     private final SchemaContext ctx;
 
@@ -38,13 +37,17 @@ final class LeafNodeDomParser extends LeafNodeBaseParser<Element> {
 
     @Override
     protected Object parseLeaf(final Element xmlElement, final LeafSchemaNode schema) {
-        return ctx == null ? DomUtils.parseXmlValue(xmlElement, codecProvider, schema.getType())
-                : DomUtils.parseXmlValue(xmlElement, codecProvider, schema, schema.getType(), ctx);
+        try {
+            return ctx == null ? DomUtils.parseXmlValue(xmlElement, codecProvider, schema.getType())
+                               : DomUtils.parseXmlValue(xmlElement, codecProvider, schema, schema.getType(), ctx);
+        } catch (IllegalArgumentException e) {
+            throw new IllegalArgumentException(String.format("Failed to parse element %s as leaf %s",
+                xmlElement, schema.getPath()), e);
+        }
     }
 
     @Override
     protected Map<QName, String> getAttributes(final Element element) {
         return DomUtils.toAttributes(element.getAttributes());
     }
-
 }