W jaki sposób można ponownie rzutować docelowy wyjątek wyjątku InvocationTargetException. Mam metodę, która używa odbicia, aby wywołać metodę invoke() w ramach jednej z moich klas. Jeśli jednak w moim kodzie znajduje się wyjątek, nie martwię się wyjątkiem InvocationTargetException i chcę tylko wyjątku docelowego. Oto przykład:Ponownie wyrzuć wyjątek celu wyjątku InvocationTargetException
public static Object executeViewComponent(String name, Component c,
HttpServletRequest request) throws Exception {
try {
return c.getClass()
.getMethod(c.getMetaData().getMethod(), HttpServletRequest.class)
.invoke(c, request);
} catch (InvocationTargetException e) {
// throw the target exception here
}
}
Podstawowym problemem jestem stoi to, że wywołanie rzut e.getCause(); nie rzuca wyjątku, ale raczej rzuca Throwable. Być może podchodzę do tego niepoprawnie?
+1 za dodanie sprawdzenia typu. –
Jak można uzyskać przyczynę 'null' dla wyjątku InvocationTargetException? –
Nie sądzę, że będzie kiedykolwiek przyczyną tego wyjątku jest wywoływana przez Method.invoke(), ale InvocationTargetException ma konstruktora dopuszczające zerowy cel, więc w innych sytuacjach może być zerowy. Nie wiem na pewno, z Dokumentu API Method.invoke, jeśli błąd jest zawijany wewnątrz wyjątku InvocationTargetException zgłaszanego w niezmienionym stanie. –