[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] Monitoring all method calls exception

Hi,
 
I want to write an aspect that logs any call to my Package (myPackage) from outside of it - those I don't expect in other words.
 
I'm facing the following problems with my newbie code:
1. I  thought I could restrict my advice to  calls made outside of my package by using within(! myPackage.bookTrading.* ) , but as you can see in the output below, it still seems to include calls made from within my package.
 
2. Where a call is to a method contained in a jar rather than in code for which the source is included in the project, thisJoinPoint .getTarget().getClass errors out with a nasty message, something along the lines of "Attempt to send a message to a non object value". I assume that this behaviour would be expected, but any ideas how I can trap for this rather than letting an error be raised.
 
Really appreciate any help,
 
Thanks
 
Rob
 
 
 
public
aspect WatchMethodCalls {

pointcut WatchAll(): call(* myPackage ..*.*(..))
&& within(! myPackage.bookTrading.*) && within(! WatchMethodCalls);

before( ) :  WatchAll( )

{

    System.out.println("thisJoinPoint.getTarget().getSignature() " +thisJoinPointStaticPart .getSignature());
    System.out.println("thisJoinPoint.getTarget().getSourceLocation() " + thisJoinPointStaticPart .getSourceLocation());
    System.out.println("thisJoinPoint.getTarget().getClass() " + thisJoinPoint .getTarget().getClass());

 
}

Sample output;

thisJoinPoint.getTarget().getSignature() Vector myPackage.bookTrading.BookBuyerAgentMalicious.access$0(BookBuyerAgentMalicious)
thisJoinPoint.getTarget().getSourceLocation() BookBuyerAgentMalicious.java:288

Error occurred in WatchAll:java.lang.NullPointerException
at apoptotic.BlockMethodCalls.ajc$before$apoptotic_BlockMethodCalls$1$2e232b3e (BlockMethodCalls.aj:22)
at apoptotic.bookTrading.BookBuyerAgentMalicious$BookNegotiator.action(BookBuyerAgentMalicious.java:288)
at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:340)