InvocationTargetException與UndeclaredThrowableException


InvocationTargetException

當java反射調用方拋出異常時,就會用InvocationTargetException將原異常包裹;

UndeclaredThrowableException

java動態代理時拋出的異常。當對某接口進行動態代理,接口的方法名稱上未聲明某類受檢異常,而方法卻拋出了該異常,動態代理會將該異常用UndeclaredThrowableException包裹。

由於jdk動態代理內部會調用method.invoke進行調用,當method拋出異常時,則會拋出InvocationTargetException。

由於InvocationTargetException是受檢異常,當代理接口方法未標識InvocationTargetException,則拋出UndeclaredThrowableException

處理方法:

public static Throwable unwrapThrowable(Throwable wrapped) {
Throwable unwrapped = wrapped;
while (true) {
if (unwrapped instanceof InvocationTargetException) {
unwrapped = ((InvocationTargetException) unwrapped).getTargetException();
} else if (unwrapped instanceof UndeclaredThrowableException) {
unwrapped = ((UndeclaredThrowableException) unwrapped).getUndeclaredThrowable();
} else {
return unwrapped;
}
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM