61

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

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ます。

4

1 に答える 1

98

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

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

于 2011-03-30T18:12:21.327 に答える