Подтвердить что ты не робот

Получение 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.

4b9b3361

Ответ 1

AccessException - проверенное исключение, но оно было выбрано из метода, который не объявляет его в своем предложении throws (фактически - из аспекта, перехватывающего этот метод). Это ненормальное условие в Java, поэтому ваше исключение обернуто UndeclaredThrowableException, которое не отмечено.

Чтобы получить свое исключение как есть, вы можете объявить его в предложении throws метода, который перехватывается вашим аспектом, или использовать другое исключенное исключение (т.е. подкласс RuntimeException) вместо AccessException.