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).
One way to do it:
try { myMethod.invoke(null, myParam); }
catch (InvocationTargetException e) {
try { throw e.getCause(); }
catch (MyCustomException e) { ...}
catch (MyOtherException e) { ...}
}
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 {
...
}
}
If you are trying to add a catch
clause in the method that executes myMethod.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 the invoke
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 an InvocationTargetException
, if I recall correctly.
Check the last part of this explanation concerning the InvocationTargetException
.