web-dev-qa-db-ja.com

自分の例外の代わりにUndeclaredThrowableExceptionを取得する

私は次のコードを持っています

public Object handlePermission(ProceedingJoinPoint joinPoint, RequirePermission permission) throws AccessException, Throwable {
    System.out.println("Permission = " + permission.value());
    if (user.hasPermission(permission.value())) {
        System.out.println("Permission granted ");
        return joinPoint.proceed();
    } else {
        System.out.println("No Permission");
        throw new AccessException("Current user does not have required permission");
    }

}

権限のないユーザーを使用すると、Java.lang.reflect.UndeclaredThrowableExceptionの代わりにAccessException

45
user373201

AccessExceptionはチェック済みの例外ですが、throws句で宣言されていないメソッドからスローされました(実際には、そのメソッドをインターセプトするアスペクトから)。これはJavaの異常な状態であるため、例外はUndeclaredThrowableExceptionでラップされており、チェックされていません。

例外をそのまま取得するには、アスペクトによってインターセプトされるメソッドのthrows句で宣言するか、RuntimeExceptionの代わりに別の未チェックの例外(つまり、AccessExceptionのサブクラス)を使用します。

77
axtavt