Получение 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
.
Ответы
Ответ 1
AccessException
- проверенное исключение, но оно было выбрано из метода, который не объявляет его в своем предложении throws
(фактически - из аспекта, перехватывающего этот метод). Это ненормальное условие в Java, поэтому ваше исключение обернуто UndeclaredThrowableException
, которое не отмечено.
Чтобы получить свое исключение как есть, вы можете объявить его в предложении throws
метода, который перехватывается вашим аспектом, или использовать другое исключенное исключение (т.е. подкласс RuntimeException
) вместо AccessException
.