NIFI-43: Do not throw InvocationTargetException if it is wrapping a 
RuntimeException; instead just throw the RuntimeException


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/e04a55d3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/e04a55d3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/e04a55d3

Branch: refs/heads/NIFI-169
Commit: e04a55d3a5097d1ae3ff5c5a4c8f8ad1e1dc56b9
Parents: 73cc6cb
Author: Mark Payne <marka...@hotmail.com>
Authored: Mon Dec 15 13:14:42 2014 -0500
Committer: Mark Payne <marka...@hotmail.com>
Committed: Mon Dec 15 13:14:42 2014 -0500

----------------------------------------------------------------------
 .../org/apache/nifi/util/ReflectionUtils.java   | 72 +++++++++++---------
 1 file changed, 40 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/e04a55d3/nar-bundles/framework-bundle/framework/core/src/main/java/org/apache/nifi/util/ReflectionUtils.java
----------------------------------------------------------------------
diff --git 
a/nar-bundles/framework-bundle/framework/core/src/main/java/org/apache/nifi/util/ReflectionUtils.java
 
b/nar-bundles/framework-bundle/framework/core/src/main/java/org/apache/nifi/util/ReflectionUtils.java
index 9d52eb3..e15e00a 100644
--- 
a/nar-bundles/framework-bundle/framework/core/src/main/java/org/apache/nifi/util/ReflectionUtils.java
+++ 
b/nar-bundles/framework-bundle/framework/core/src/main/java/org/apache/nifi/util/ReflectionUtils.java
@@ -42,43 +42,51 @@ public class ReflectionUtils {
      * @throws IllegalAccessException
      */
     public static void invokeMethodsWithAnnotation(final Class<? extends 
Annotation> annotation, final Object instance, final Object... args) throws 
IllegalAccessException, IllegalArgumentException, InvocationTargetException {
-        for (final Method method : instance.getClass().getMethods()) {
-            if (method.isAnnotationPresent(annotation)) {
-                final boolean isAccessible = method.isAccessible();
-                method.setAccessible(true);
-
-                try {
-                    final Class<?>[] argumentTypes = 
method.getParameterTypes();
-                    if (argumentTypes.length > args.length) {
-                        throw new 
IllegalArgumentException(String.format("Unable to invoke method %1$s on %2$s 
because method expects %3$s parameters but only %4$s were given",
-                                method.getName(), instance, 
argumentTypes.length, args.length));
-                    }
-
-                    for (int i = 0; i < argumentTypes.length; i++) {
-                        final Class<?> argType = argumentTypes[i];
-                        if (!argType.isAssignableFrom(args[i].getClass())) {
-                            throw new IllegalArgumentException(String.format(
-                                    "Unable to invoke method %1$s on %2$s 
because method parameter %3$s is expected to be of type %4$s but argument 
passed was of type %5$s",
-                                    method.getName(), instance, i, argType, 
args[i].getClass()));
+        try {
+            for (final Method method : instance.getClass().getMethods()) {
+                if (method.isAnnotationPresent(annotation)) {
+                    final boolean isAccessible = method.isAccessible();
+                    method.setAccessible(true);
+    
+                    try {
+                        final Class<?>[] argumentTypes = 
method.getParameterTypes();
+                        if (argumentTypes.length > args.length) {
+                            throw new 
IllegalArgumentException(String.format("Unable to invoke method %1$s on %2$s 
because method expects %3$s parameters but only %4$s were given",
+                                    method.getName(), instance, 
argumentTypes.length, args.length));
                         }
-                    }
-
-                    if (argumentTypes.length == args.length) {
-                        method.invoke(instance, args);
-                    } else {
-                        final Object[] argsToPass = new 
Object[argumentTypes.length];
-                        for (int i = 0; i < argsToPass.length; i++) {
-                            argsToPass[i] = args[i];
+    
+                        for (int i = 0; i < argumentTypes.length; i++) {
+                            final Class<?> argType = argumentTypes[i];
+                            if (!argType.isAssignableFrom(args[i].getClass())) 
{
+                                throw new 
IllegalArgumentException(String.format(
+                                        "Unable to invoke method %1$s on %2$s 
because method parameter %3$s is expected to be of type %4$s but argument 
passed was of type %5$s",
+                                        method.getName(), instance, i, 
argType, args[i].getClass()));
+                            }
+                        }
+    
+                        if (argumentTypes.length == args.length) {
+                            method.invoke(instance, args);
+                        } else {
+                            final Object[] argsToPass = new 
Object[argumentTypes.length];
+                            for (int i = 0; i < argsToPass.length; i++) {
+                                argsToPass[i] = args[i];
+                            }
+    
+                            method.invoke(instance, argsToPass);
+                        }
+                    } finally {
+                        if (!isAccessible) {
+                            method.setAccessible(false);
                         }
-
-                        method.invoke(instance, argsToPass);
-                    }
-                } finally {
-                    if (!isAccessible) {
-                        method.setAccessible(false);
                     }
                 }
             }
+        } catch (final InvocationTargetException ite) {
+            if ( ite.getCause() instanceof RuntimeException ) {
+                throw (RuntimeException) ite.getCause();
+            } else {
+                throw ite;
+            }
         }
     }
 

Reply via email to