web-dev-qa-db-fra.com

obtenir UndeclaredThrowableException au lieu de ma propre exception

J'ai le code suivant

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");
    }

}

Lorsque j'utilise un utilisateur qui ne dispose pas d'autorisations, j'obtiens Java.lang.reflect.UndeclaredThrowableException au lieu de AccessException.

45
user373201

AccessException est une exception vérifiée, mais elle a été levée à partir de la méthode qui ne la déclare pas dans sa clause throws (en fait - à partir de l'aspect interceptant cette méthode). C'est une condition anormale en Java, donc votre exception est encapsulée avec UndeclaredThrowableException, qui n'est pas cochée.

Pour obtenir votre exception telle quelle, vous pouvez soit la déclarer dans la clause throws de la méthode interceptée par votre aspect, soit utiliser une autre exception non vérifiée (c'est-à-dire une sous-classe de RuntimeException) au lieu de AccessException.

77
axtavt