Andy,
Another question off the back of this one it you don't mind.
Is it possible to use getSignature().getDeclaringType() to get a reference
to the object to which it refers?
Essentially, I'm writing some code which monitors certain obects. If a
method is called on one of these objects by some code which is not
authorised to do so I want to terminate the object before it is compromised,
so I want to get a reference to it to call its takeDown() method. The
objects may be of different types but they all have a takeDown() method, but
as I don't know the target type in advance, I can't use && target() I
presume.
Really appreciate your help
Thanks
Rob
On 07/11/2007, Rob Austin <[EMAIL PROTECTED]> wrote:
>
> That's marvellous Andy, thanks so much
>
> On 07/11/2007, Andy Clement <[EMAIL PROTECTED]> wrote:
> >
> > Your pointcut will catch static method calls. At the call to static
> > method there is no target instance, and so thisJoinPoint.getTarget()
> > will return NULL, hence the NPE. If you want the classname of the
> > target, use getSignature().getDeclaringType()
> >
> > You should write !within(mypackage.bookTrading.*) and not
> > within(!mypackage.bookTrading.*) as the latter will not exclude inner
> > types and it looks like you have one of those because of the access$0
> > shown in your output. I imagine you really also want to exclude
> > subtypes too, so it would be !within(mypackage.bookTrading..*)
> >
> > cheers,
> > Andy.
> >
> >
> > On 06/11/2007, Rob Austin <[EMAIL PROTECTED]> wrote:
> > >
> > > 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)
> > >
> > >
> > >
> > >
> > > _______________________________________________
> > > aspectj-users mailing list
> > > [email protected]
> > > https://dev.eclipse.org/mailman/listinfo/aspectj-users
> > >
> > >
> > _______________________________________________
> > aspectj-users mailing list
> > [email protected]
> > https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
>
>
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users