InvocationContext.proceed () исключения? - PullRequest
1 голос
/ 27 марта 2012

Вызывает ли метод continue () файла javax.interceptor.InvocationContext какие-либо исключения, кроме исключений из целевого метода или промежуточного кода?Как насчет InvocationTargetException?Документация, как правило, кажется неполной по этому вопросу.

[РЕДАКТИРОВАТЬ] Я спрашиваю: является ли InvocationTargetException тем, что обычно выдается разработчиками InvocationContext?Или исходное исключение обычно повторно выбрасывается?Или что-то другое?

Декларация throws, конечно, допускает все исключения, но мне интересно, что такое контракт?Естественным контрактом было бы оставить исключения из вызванного целевого метода без изменений.Конечно, это не может быть выражено в системе типов Java.И это не документировано или что-нибудь.Таким образом, в принципе, любое исключение может быть выброшено.Исключение из целевого метода в принципе можно обернуть любым способом;не только InvocationTargetException.

Это определенно имеет архитектурные последствия.Если для реализаций InvocationContext нет «контракта», система исключений станет практически бесполезной;по сути, все, что мы сможем узнать, - это исключение.Поэтому я спрашиваю о таком «контракте», то есть ожидаемом поведении реализаций: есть ли такой?

1 Ответ

0 голосов
/ 27 марта 2012
  • Во время выполнения компилятор не может анализировать вызовы метода с помощью отражения, поэтому он преобразует их в исключение, называемое InvocationTargetException.

    При вызове конструктора возникает исключение InvocationTargetExceptionвызывается через Constructor.newInstance () или метод, вызываемый через Method.invoke (), генерирует исключение.InvocationTargetException инкапсулирует выброшенное исключение, которое можно получить с помощью getTargetException ().

    Вы должны развернуть это исключение, чтобы получить исходную основную причину.

  • Как задокументировано, InvocationContext.proceed() бросает java.lang.Exception.Далее он вызывает других перехватчиков в строке вызова.

    Я не сталкивался с какими-либо проблемами, но может возникнуть, когда используются вложенные перехватчики и одно из исключений выбрасывает перехватчик, может привести к цепочке каскадных исключений.

...