Propagate original Exception

Change-Id: I4824fc33bf6b1d8651ab5af33c2abf0ba85b85c0
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
index a3bbe9c..cb88b02 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DataTreeBuilderHelper.java
@@ -748,7 +748,7 @@
         try {
             childClass = moduleClass.getClassLoader().loadClass(className);
         } catch (ClassNotFoundException e) {
-            throw new ModelConverterException(E_FAIL_TO_LOAD_CLASS + className);
+            throw new ModelConverterException(E_FAIL_TO_LOAD_CLASS + className, e);
         }
         if (curNode.getType().equals(SINGLE_INSTANCE_NODE)) {
             return parentObj.anydata(childClass).get(0);
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
index 572d969..d9b4157 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultDataTreeBuilder.java
@@ -689,7 +689,7 @@
             } catch (NoSuchMethodException e) {
                 throw new ModelConverterException(
                         "Failed to create data node for leaf "
-                                + leaf.getName());
+                                + leaf.getName(), e);
             }
         }
     }
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java
index bb473e8..6ac031e 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java
@@ -354,7 +354,7 @@
             return getAttributeOfObject(keys, getCamelCase(keyName, null));
         } catch (NoSuchMethodException e) {
             throw new ModelConverterException("invalid key value in model id for list" +
-                                                      "." + keys.getClass().getName());
+                                                      "." + keys.getClass().getName(), e);
         }
     }
 
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobLeafListNodeHandler.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobLeafListNodeHandler.java
index 4157a06..754c3db 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobLeafListNodeHandler.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobLeafListNodeHandler.java
@@ -113,7 +113,7 @@
                 IllegalAccessException | NoSuchFieldException e) {
             log.error(L_FAIL_TO_INVOKE_METHOD, parentClass.getName());
             throw new ModelConverterException(E_FAIL_TO_INVOKE_METHOD + parentClass
-                    .getName());
+                    .getName(), e);
         }
     }
 }
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobLeafNodeHandler.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobLeafNodeHandler.java
index 2079b1d..8414387 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobLeafNodeHandler.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobLeafNodeHandler.java
@@ -94,7 +94,7 @@
                 IllegalAccessException | NoSuchFieldException e) {
             log.error(L_FAIL_TO_INVOKE_METHOD, parentClass.getName());
             throw new ModelConverterException(E_FAIL_TO_INVOKE_METHOD + parentClass
-                    .getName());
+                    .getName(), e);
         }
     }
 }
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobUtils.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobUtils.java
index 529e728..681d1eb 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobUtils.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobUtils.java
@@ -599,7 +599,7 @@
                 }
             }
         } catch (ClassNotFoundException e) {
-            throw new ModelConverterException(E_FAIL_TO_LOAD_CLASS);
+            throw new ModelConverterException(E_FAIL_TO_LOAD_CLASS, e);
         }
         return null;
     }
@@ -615,7 +615,7 @@
         try {
             return loader.loadClass(name);
         } catch (ClassNotFoundException e) {
-            throw new ModelConverterException(E_FAIL_TO_LOAD_CLASS + name);
+            throw new ModelConverterException(E_FAIL_TO_LOAD_CLASS + name, e);
         }
     }
 
@@ -632,14 +632,14 @@
             return defaultClass.newInstance();
         } catch (ClassNotFoundException e) {
             log.error(L_FAIL_TO_LOAD_CLASS, name);
-            throw new ModelConverterException(E_FAIL_TO_LOAD_CLASS + name);
+            throw new ModelConverterException(E_FAIL_TO_LOAD_CLASS + name, e);
         } catch (NullPointerException e) {
             log.error(L_REFLECTION_FAIL_TO_CREATE_OBJ, name);
             throw new ModelConverterException(E_REFLECTION_FAIL_TO_CREATE_OBJ +
-                                                      name);
+                                                      name, e);
         } catch (InstantiationException | IllegalAccessException e) {
             log.error(L_FAIL_TO_CREATE_OBJ, name);
-            throw new ModelConverterException(E_FAIL_TO_CREATE_OBJ + name);
+            throw new ModelConverterException(E_FAIL_TO_CREATE_OBJ + name, e);
         }
     }
 
@@ -744,20 +744,20 @@
                     throw new ModelConverterException(
                             "Failed to load setter method for " +
                                     javaName + " in key class"
-                                    + keyClassName);
+                                    + keyClassName, e);
                 } catch (InvocationTargetException e) {
                     throw new ModelConverterException(
                             "Failed to invoke setter method for " +
                                     javaName + " in key class"
-                                    + keyClassName);
+                                    + keyClassName, e);
                 } catch (ClassNotFoundException e) {
                     throw new ModelConverterException("Failed to load key class"
-                                                              + keyClassName);
+                                                              + keyClassName, e);
                 } catch (IllegalAccessException | InstantiationException e) {
                     throw new ModelConverterException("Failed Instantiation of key class"
-                                                              + keyClassName);
+                                                              + keyClassName, e);
                 } catch (NoSuchFieldException e) {
-                    e.printStackTrace();
+                    throw new ModelConverterException("Field " + javaName + " not found", e);
                 }
             }
         }
@@ -805,7 +805,7 @@
                 }
             } catch (ClassNotFoundException e) {
                 throw new ModelConverterException("Failed to load leaf identifier class." +
-                                                          leafName);
+                                                          leafName, e);
             }
         }
         return midb;
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobWorkBench.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobWorkBench.java
index 63875e5..aab956c 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobWorkBench.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/YobWorkBench.java
@@ -249,13 +249,13 @@
             method.invoke(parentObj, curObj);
         } catch (NoSuchFieldException e) {
             log.error(L_FAIL_TO_GET_FIELD, parentClassName);
-            throw new ModelConverterException(E_FAIL_TO_GET_FIELD + parentClassName);
+            throw new ModelConverterException(E_FAIL_TO_GET_FIELD + parentClassName, e);
         } catch (NoSuchMethodException e) {
             log.error(L_FAIL_TO_GET_METHOD, parentClassName);
-            throw new ModelConverterException(E_FAIL_TO_GET_METHOD + parentClassName);
+            throw new ModelConverterException(E_FAIL_TO_GET_METHOD + parentClassName, e);
         } catch (InvocationTargetException | IllegalAccessException e) {
             log.error(L_FAIL_TO_INVOKE_METHOD, parentClassName);
-            throw new ModelConverterException(E_FAIL_TO_INVOKE_METHOD + parentClassName);
+            throw new ModelConverterException(E_FAIL_TO_INVOKE_METHOD + parentClassName, e);
         }
     }
 
@@ -383,10 +383,10 @@
             method.invoke(builder, instance);
         } catch (NoSuchMethodException e) {
             log.error(L_FAIL_TO_GET_METHOD, ADD_AUGMENT_METHOD);
-            throw new ModelConverterException(E_FAIL_TO_GET_METHOD + ADD_AUGMENT_METHOD);
+            throw new ModelConverterException(E_FAIL_TO_GET_METHOD + ADD_AUGMENT_METHOD, e);
         } catch (InvocationTargetException | IllegalAccessException e) {
             log.error(L_FAIL_TO_INVOKE_METHOD, ADD_AUGMENT_METHOD);
-            throw new ModelConverterException(E_FAIL_TO_INVOKE_METHOD + ADD_AUGMENT_METHOD);
+            throw new ModelConverterException(E_FAIL_TO_INVOKE_METHOD + ADD_AUGMENT_METHOD, e);
         }
     }