Andy
2009/9/28 Kristof Jozsa <
kristof.jozsa@xxxxxxxxx>:
> Hi Andy,
>
> I think your sample is about something else. The code I pasted has a child
> class which in fact doesn't hold the method getting called, therefore
> methodcall() and super.methodcall() results in an identical behaviour just
> one of them gets weaved while the other doesn't.
>
> My target was to simply create a pointcut which can intercept childclasses
> of javax.xml.ws.Service calling their parent's getPort() method. See my
> original code:
>
> pointcut wsGetPortCall() :
> call(Object javax.xml.ws.Service+.getPort(..));
>
> but this in fact behaved a bit differently as expected as it missed the
> cases where other programmers typed super.getPort() and not simply getPort()
> in their code (and they did not had a getPort() body overwriting the
> superclass' one). This was the barebone example code which demonstrates the
> exact problem I'm having:
>
> new Service(null, null) {
> @SuppressWarnings("unused")
> public void boo() {
> super.getPort(null); // (1)
> getPort(null); // (2)
> }
> };
>
> I hope it makes more sense now. My question is how to accomplish my original
> goal? Is it possible?
>
> thanks,
> K
>
>
>
> On Mon, Sep 28, 2009 at 5:26 PM, Andy Clement <
andrew.clement@xxxxxxxxx>
> wrote:
>>
>> public class A {
>> public static void main(String []argv) {
>> B b = new B();
>> b.run();
>> }
>> }
>>
>>
>> class Base {
>> public void getPort() {
>> System.out.println("Base.getPort()");
>> }
>> }
>>
>> class B extends Base {
>> public void run() {
>> super.getPort();
>> getPort();
>> }
>> public void getPort() {
>> System.out.println("B.getPort()");
>> }
>> }
>>
>> javac A.java
>> java A
>> Base.getPort()
>> B.getPort()
>>
>> they can do different things. If your question is why your advice
>> didn't match, it is because super calls are not join points. And that
>> is probably a hangover from the old days of source weaving I think,
>> which has just never been revisited.
>>
>> Andy
>>
>>
>> 2009/9/28 Kristof Jozsa <
kristof.jozsa@xxxxxxxxx>:
>> > Sample code:
>> >
>> > public aspect WSPortFixerInterceptor {
>> > pointcut wsGetPortCall() :
>> > call(Object javax.xml.ws.Service+.getPort(..));
>> >
>> > Object around() : wsGetPortCall() {
>> > return
>> > WsClientTool.getInstance().fixWebServicePort(proceed()); //
>> > never mind this line
>> > }
>> >
>> >
>> > /** private inner class to verify correct interception */
>> > @SuppressWarnings("unused")
>> > private static class TestFixer {
>> > {
>> > new Service(null, null) {
>> >
>> > @SuppressWarnings("unused")
>> > public void boo() {
>> > super.getPort(null); // (1)
>> > getPort(null); // (2)
>> > }
>> > };
>> > }
>> > }
>> > }
>> >
>> > To my best knowledge, the two calls at (1) and (2) does the very same in
>> > Java, but appearently (2) gets intercepted by this aspect and (1) does
>> > not..
>> > what's the explanation for this behaviour?
>> >
>> > thanks,
>> > K
>> >
>> > _______________________________________________
>> > aspectj-users mailing list
>> >
aspectj-users@xxxxxxxxxxx
>> >
https://dev.eclipse.org/mailman/listinfo/aspectj-users
>> >
>> >
>> _______________________________________________
>> aspectj-users mailing list
>>
aspectj-users@xxxxxxxxxxx
>>
https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>
> _______________________________________________
> aspectj-users mailing list
>
aspectj-users@xxxxxxxxxxx
>
https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users