Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting UndeclaredThrowableException instead of my own exception

Tags:

java

aop

aspect

I have the following code

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

When I use a user that does not have permissions, I get java.lang.reflect.UndeclaredThrowableException instead of AccessException.

like image 329
user373201 Avatar asked Mar 30 '11 17:03

user373201


1 Answers

AccessException is a checked exception, but it was thrown from the method that doesn't declare it in its throws clause (actually - from the aspect intercepting that method). It's an abnormal condition in Java, so your exception is wrapped with UndeclaredThrowableException, which is unchecked.

To get your exception as is, you can either declare it in the throws clause of the method being intercepted by your aspect, or use another unchecked exception (i.e. a subclass of RuntimeException) instead of AccessException.

like image 161
axtavt Avatar answered Sep 20 '22 13:09

axtavt