Reputation: 141
In AspectJ, I want to swallow a exception.
@Aspect
public class TestAspect {
@Pointcut("execution(public * *Throwable(..))")
void throwableMethod() {}
@AfterThrowing(pointcut = "throwableMethod()", throwing = "e")
public void swallowThrowable(Throwable e) throws Exception {
logger.debug(e.toString());
}
}
public class TestClass {
public void testThrowable() {
throw new Exception();
}
}
Above, it didn't swallow exception. The testThrowable()'s caller still received the exception. I want caller not to receive exception. How can do this? Thanks.
Upvotes: 8
Views: 4790
Reputation: 141
My solution!
@Aspect
public class TestAspect {
Logger logger = LoggerFactory.getLogger(getClass());
@Pointcut("execution(public * *Throwable(..))")
void throwableMethod() {}
@Around("throwableMethod()")
public void swallowThrowing(ProceedingJoinPoint pjp) {
try {
pjp.proceed();
} catch (Throwable e) {
logger.debug("swallow " + e.toString());
}
}
}
Thanks again.
Upvotes: 5
Reputation: 12403
I think it can't be done in AfterThrowing
. You need to use Around
.
Upvotes: 6