| Recipe 5.2. Capturing the Thrown ExceptionProblemWithin the advice triggered by a join point captured using the handler(TypePattern) pointcut, you want to access the exception that was being caught by the catch block within the corresponding advice. SolutionCombine the args([Types | Identifiers]) pointcut with the handler(TypePattern) pointcut to expose the caught exception as an identifier on your pointcut that can be passed to the corresponding advice. DiscussionExample 5-2 shows how the MyException exception is passed to the before( ) advice as the exception identifier on the myExceptionHandlerPointcut pointcut. Example 5-2. Accessing the caught MyException exceptionpublic aspect AccessThrownException  {    pointcut myExceptionHandlerPointcut(MyException exception) :        handler(MyException) &&        args(exception);    // Advice declaration    before(MyException exception) : myExceptionHandlerPointcut(exception)    {       System.out.println(          "-------------- Aspect Advice Logic ---------------");       System.out.println(          "In the advice picked by " + "myExceptionHandlerPointcut( )");       System.out.println(          "Signature: "             + thisJoinPoint.getStaticPart( ).getSignature( ));       System.out.println(          "Source Line: "             + thisJoinPoint.getStaticPart( ).getSourceLocation( ));              System.out.println("Exception caught:");       exception.printStackTrace( );              System.out.println(          "--------------------------------------------------");    } }See AlsoThe handler(TypePattern) poincut's syntax is shown in Recipe 5.1; Recipe 5.1 also shows some of the wildcard variations that can be used in a TypePattern; the args([Types | Identifiers]) pointcut declaration is explained in Recipe 11.3; Chapter 13 describes the different types of advice available in AspectJ. |