Bem, I'tentei entender e ler o que poderia causar isso, mas simplesmente não consigo'não consigo entender:
Eu tenho isto algures no meu código:
try{
..
m.invoke(testObject);
..
} catch(AssertionError e){
...
} catch(Exception e){
..
}
O problema é que, quando tenta invocar algum método, atira
InvocationTargetException' ao invés de alguma outra exceção esperada (especificamente 'ArrayIndexOutOfBoundsException').
Como eu realmente sei qual método é invocado, fui direto para este código de método e adicionei um bloco de tentativa de captura para a linha que supõe lançar ArrayIndexexOutOfBoundsException' e realmente jogou
ArrayIndexOutOfBoundsException' como esperado. No entanto, ao subir a linha
de alguma forma muda para InvocationTargetException' e no código acima
catch(Exception e)`
e é "InvocationTargetException" e não "ArrayIndexOutOfBoundsException".
como esperado.
O que poderia causar tal comportamento ou como posso verificar tal coisa?
Você'adicionou um nível extra de abstração chamando o método com reflexão. A camada de reflexão envolve qualquer exceção em uma `InvocationTargetException', o que lhe permite dizer a diferença entre uma exceção atualmente causada por uma falha na chamada de reflexão (talvez sua lista de argumentos fosse't válida, por exemplo) e uma falha dentro do método chamado.
Basta desembrulhar a causa dentro da "InvocationTargetException" e você'vai chegar ao original.
A exceção é lançada se
InvocationTargetException - se o método subjacente lançar uma exceção.
Então, se o método, que foi invocado com a API de reflexão, lança uma exceção (exceção em tempo de execução, por exemplo), a API de reflexão irá envolver a exceção em uma `InvocationTargetException'.
Do Javadoc do método.invoke()
Gargantas: InvocationTargetException - se o método subjacente lançar uma excepção.
Esta excepção é lançada se o método chamado de excepção.