Ну, я пытался понять и прочитать, что может вызвать это, но я просто не могу понять:
У меня есть это где-то в моем коде:
try{
..
m.invoke(testObject);
..
} catch(AssertionError e){
...
} catch(Exception e){
..
}
Дело в том, что, когда он пытается вызвать какой-то метод, он выбрасывает
InvocationTargetException
вместо некоторого другого ожидаемого исключения (в частности ArrayIndexOutOfBoundsException
). Поскольку я на самом деле знаю, какой метод вызывается, я сразу перешел к коду этого метода и добавил блок try-catch для строки, которая предполагает выброс, ArrayIndexOutOfBoundsException
и он действительно выбросил, ArrayIndexOutOfBoundsException
как и ожидалось. Но при переходе на это как - то меняется InvocationTargetException
и в приведенном выше коде catch(Exception e)
е, InvocationTargetException
а не ArrayIndexOutOfBoundsException
как ожидалось.
Что может вызвать такое поведение или как я могу проверить такую вещь?
источник
InvocationTargetException
», я просто обнаружил, что если вы напечатали это, используяexception.printStackTrace()
, вы просто посмотрите на раздел «Причины:» вместо раздела «верхняя половина / нормальный».try {...} catch (InvocationTargetException ex) { log.error("oops!", ex.getCause()) }
или...catch... { throw ex.getCause() }
you just look at the "Caused By:" section instead of the top half/normal section
Исключение выдается, если
Поэтому, если метод, который был вызван с помощью API-интерфейса отражения, выдает исключение (например, исключение времени выполнения), API-интерфейс отражения преобразует исключение в
InvocationTargetException
.источник
Используйте
getCause()
метод наInvocationTargetException
для получения исходного исключения.источник
Из Javadoc Method.invoke ()
Это исключение выдается, если вызванный метод бросил исключение.
источник
java.lang.reflect.Proxy
экземпляров, дополняющих завернутый объект. Каждый из нихProxy
корректно обрабатывает определенное исключение (возможно, выбрасываемое обернутым объектом), используя свое собственноеInvocationHandler
. Для исключения, которое будет распространяться через этот каскад до достижения правильного обработчика / прокси-сервера вызова, в каждомInvocationHandler
я бы поймалInvocationTargetException
, развернул его, проверил, является лиinstanceof
исключение в оболочке исключением, которое должно обрабатываться этимInvocationHandler
. Если бы это не былоinstanceof
, я бы выбросил развернутое исключение ... верно?Это
InvocationTargetException
, вероятно, завершение вашегоArrayIndexOutOfBoundsException
. При использовании рефлексии невозможно предсказать, что может дать этот метод - поэтому вместо использованияthrows Exception
подхода все исключения перехватываются и оборачиваютсяInvocationTargetException
.источник
Это напечатает точную строку кода в конкретном методе, который при вызове вызывает исключение:
источник
Это описывает что-то вроде
источник
Вы можете сравнить с исходным классом исключений, используя метод getCause () следующим образом:
источник
У меня была
java.lang.reflect.InvocationTargetException
ошибка из заявления вызывающего объекта регистратор во внешнемclass
внутриtry
/catch
блока по моемуclass
.Пройдя по коду в отладчике Eclipse и наведя указатель мыши на оператор logger, я увидел, что logger
object
былnull
(некоторые внешние константы должны быть созданы в самом верху моегоclass
).источник
Это исключение выдается, если базовый метод (метод, вызванный с помощью Reflection) выдает исключение.
Поэтому, если метод, который был вызван API-интерфейсом отражения, выдает исключение (как, например, исключение времени выполнения), API-интерфейс отражения преобразует исключение в InvocationTargetException.
источник
Я столкнулся с той же проблемой. Я использовал e.getCause (). GetCause (), затем обнаружил, что это из-за неверных параметров, которые я передавал. При извлечении значения одного из параметров было исключение nullPointerException. Надеюсь, что это поможет вам.
источник
источник
Ошибка исчезла после того, как я сделал Clean-> Run xDoclet-> Run xPackaging.
В моем рабочем пространстве, в затмении.
источник