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.
InvocationTargetException.getCause();
From documentation:
InvocationTargetException is a checked exception that wraps an exception thrown by an invoked method or constructor.
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:
try {
...
} catch (InvocationTargetException ite) {
if (ite.getCause() instanceof SomeExceptionType) {
...
} else {
...
}
}