Wes,
Thanks for the suggestion. I have compiled using aspectpath and it
worked. IT was not a classpath problem, for sure. I would like to know what
difference it made using aspectpath.
Thanks again,
Ravi Varanasi
----- Original Message -----
From: "Wes Isberg" <wes@xxxxxxxxxxxxxx>
To: <aspectj-users@xxxxxxxxxxx>
Sent: Sunday, October 19, 2003 8:41 PM
Subject: Re: [aspectj-users] NoSuchMethod Exception with aspected Code !
Given the different bytecode names for the advice, perhaps
make sure the aspect class is the one produced when you weave
the input jars. If you reuse the aspect, a better way to
build would be to compile the aspect first, and then put it
on the aspectpath when compiling each client, and on the
runtime classpath.
Otherwise, perhaps the NoSuchMethodError was caused by failing
to load the aspect. Try setting up the classpath as usual, but
just running some code[1] that refers to the aspect directly
and has no aspects associated with it, e.g.,
... {some method}.. {
System.out.println("aspect class: " + Test.class.getName());
}
If that fails, it's a classpath problem (the aspect or
the aspectj runtime classes are not visible from the classloader
that loaded the target class).
Wes
[1] Best to compile this with javac, with aspect on the classpath.
ravi varanasi wrote:
Hi All,
I have encounter a weird problem while aspecting a jar file.
Following is the background to the problem :-
Name of my aspect is: Test.java.
Command to weave the input jar with the aspect: ajc -injars
input.jar -outjar out.jar Test.java
One of the classes which met the criteria for JoinPoint has been
modified by the ajc and written to the out.jar. Following is the piece of
code from the aspect weaved class (generated using a decompiler) :-
public Object getAttribute(String arg0)
{
Test.aspectOf().ajc$before$first_aspect_Test$5aa(ajc$tjp_0);
HTTPLogger.logUnableToDeserializeNamedAttribute(getLogContext(),
arg0, runtimeexception);
attributes.remove(arg0);
return null;
Exception exception;
exception;
Test.aspectOf().ajc$afterThrowing$first_aspect_Test$3d5(exception);
throw exception;
}
Please note the calls
Test.aspectOf().ajc$before$first_aspect_Test$5aa(ajc$tjp_0); and
Test.aspectOf().ajc$afterThrowing$first_aspect_Test$3d5(exception); inserted
by the ajc in the original method getAttribute(String). These methods
ajc$before$first_aspect_Test$5aa(ajc$tjp_0); &
ajc$afterThrowing$first_aspect_Test$3d5(exception); are not there in the
Test.class.
Following is the method signature map of my aspect Test.java (generated
using javap):
public class first.aspect.Test extends java.lang.Object {
public static java.lang.String methodName;
public static final first.aspect.Test ajc$perSingletonInstance;
static {};
public void setMethodName(java.lang.String);
public java.lang.String getMethodName();
public first.aspect.Test();
public void
ajc$before$first_aspect_Test$3d5(org.aspectj.lang.JoinPoint$Stat
icPart);
public static first.aspect.Test aspectOf();
public static boolean hasAspect();
}
My program fails with java.lang.NoSuchMethodError:
first.aspect.Test.ajc$before$first_aspect_Test$5aa(Lorg/aspectj/lang/JoinPoi
nt$StaticPart;)V exception when I try to execute.
Any suggestions, why this is happening? Is this a bug or I am doing
something wrong???
Following is the Test.java source:
package first.aspect;
public aspect Test {
public Test() {
System.out.println("Constructor: Test");
}
pointcut callWLServlet() : execution ( * weblogic.servlet..*.*(..) );
pointcut callServlet() : execution ( * javax.servlet..*.*(..) );
pointcut excludeInternal() : execution ( *
weblogic.management.internal..*.*(..) );
pointcut excludeTools() : execution ( *
weblogic.management.tools..*.*(..) );
pointcut excludeInfo() : execution ( *
weblogic.management.info..*.*(..) );
after() throwing (Exception npe) :(
callServlet() &&
callWLServlet() &&
(!excludeInternal()) &&
(!excludeTools()) &&
(!excludeInfo())
) {
System.out.println("Logging exception using Aspect: ");
System.out.println("=============================== ");
System.out.println("Message: " + npe.getMessage() );
System.out.println("=============================== ");
}
before() : ( callServlet() &&
callWLServlet() &&
( ! excludeInternal() ) &&
( ! excludeTools() ) &&
( ! excludeInfo() )
) {
if ( methodName.equals( thisJoinPoint.getSignature().getName() ) )
{
System.out.println("---------> Matched call: " + methodName );
throw new NullPointerException("Aspected Exception");
} else {
//System.out.println("========> Method call: " +
thisJoinPoint.getSignature().getName() + " <=========");
}
}
}
Thanks,
Ravi Varanasi
408 394 3273
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/aspectj-users
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/aspectj-users