I would like to invoke a method, using Java Reflection.
The problem is that this method (which I wrote) throws an Exception (I created a myCustomException). When I add a try/catch clause, I can't run my project, because Eclipse says "the catch clause is unreachable".
Here is when I try to invoke myMethod in the class MyClass :
270. myMethod.invoke(null, myParam); // NB : null because myMethod is static
When myMethod does not throw a MyCustomException, eveything is fine. But when it throws a MyCustomException, I get this error message :
Let's say I try to invoke fooMethod(), which is in the class BarClass(), and :
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.tests.MyClass.test5(270)
at com.tests.MyClass.main(297)
Caused by: com.tests.MyCustomException
at com.tests.barClass.fooMethod(BarClass.java:129)
... 6 more
Is it even possible ? Thanks for help anyway.
You can get the cause of it that would be the original exception.
From documentation:
http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/InvocationTargetException.html
In your catch block, you could check if exception is from the type you expect and handle it.
One simple approach would be:
If you are trying to add a
catch
clause in the method that executesmyMethod.invoke(null, myParam)
, then that's obviously not the right way of doing it. In this case you're invoking the method via reflection and this is not the place to be catching the exception, as theinvoke
method throws other exceptions. Once you invoke the method that throws the exception, if there is an exception, it will get thrown and wrapped in anInvocationTargetException
, if I recall correctly.Check the last part of this explanation concerning the
InvocationTargetException
.One way to do it: