[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| Re: [aspectj-users] Exception dilemma | 
Would it not be easier, if this is for testing only, to use JMock? You can say in JMock 'make this method throw this exception when I call it'.
regards,
Wim
2009/3/5 Oliver Böhm 
<boehm@xxxxxxxxxx>
Hi Thomas,
yes, that's exactly what I want - I tried your code and it works. I had a little problem to understand the code but I think the trick here is to use the constructor of the inner class to throw the desired exception.
What I don't understand is the $ sign before the method name ($throw) but I guess this is syntax for inner classes.
thanx for your tip
Oliver
Thomas Richard Darimont schrieb:
Hi Oliver,
so you want to throw an exception after some specific Methods return
How about this:
(Just a quick hack...)
Aspect:
[code]
package de.tutorials.training.aspects;
import java.io.IOException;
public aspect ExampleAspect {
   pointcut applicationCode(): execution(* *..*(..)) && ! within(ExampleAspect);
  //    after() throwing(Throwable t) : applicationCode(){
//    }
     after() returning: applicationCode(){
       Thrower.$throw(new IOException("oh oh"));
   }
     static class Thrower{
       private static Throwable throwable;
             private Thrower() throws Throwable{
           throw throwable;
       }
             public static void $throw(Throwable t){
           throwable = t;
           try {
               Thrower.class.newInstance();
           } catch (InstantiationException e) {
               e.printStackTrace();
           } catch (IllegalAccessException e) {
               e.printStackTrace();
           }
       }
             public static void $throw0(Throwable t){
           //Questionable but okay for "debugging" purposes
           Thread.currentThread().stop(t);
       }
   }
}
[/code]
Example:
[code]
package de.tutorials.training;
public class Main {
   public static void main(String[] args) throws Throwable {
       try {
           m0();
       } catch (Throwable t) {
           t.printStackTrace();
       }
             try {
           m1();
       } catch (Throwable t) {
           t.printStackTrace();
       }
       try {
           m2();
       } catch (Throwable t) {
           t.printStackTrace();
       }
   }
   public static void m0() {}
   public static int m1() { return 0; }
   public static void m2() throws Throwable {}
}
[/code]
Output:
[code]
java.io.IOException: oh oh
   at de.tutorials.training.aspects.ExampleAspect.ajc$afterReturning$de_tutorials_training_aspects_ExampleAspect$1$d15ea11e(ExampleAspect.aj:12) 
   at de.tutorials.training.Main.m0(Main.java:29)
   at de.tutorials.training.Main.main(Main.java:10)
java.io.IOException: oh oh
   at de.tutorials.training.aspects.ExampleAspect.ajc$afterReturning$de_tutorials_training_aspects_ExampleAspect$1$d15ea11e(ExampleAspect.aj:12) 
   at de.tutorials.training.Main.m1(Main.java:32)
   at de.tutorials.training.Main.main(Main.java:15)
java.io.IOException: oh oh
   at de.tutorials.training.aspects.ExampleAspect.ajc$afterReturning$de_tutorials_training_aspects_ExampleAspect$1$d15ea11e(ExampleAspect.aj:12) 
   at de.tutorials.training.Main.m2(Main.java:37)
   at de.tutorials.training.Main.main(Main.java:20)
Exception in thread "main" java.io.IOException: oh oh
   at de.tutorials.training.aspects.ExampleAspect.ajc$afterReturning$de_tutorials_training_aspects_ExampleAspect$1$d15ea11e(ExampleAspect.aj:12) 
   at de.tutorials.training.Main.main(Main.java:25)
[/code]
Best regards,
Thomas
Oliver Böhm schrieb:
Hallo,
for testing purpose I want to throw an Exception after a method returns:
    after() returning throws InterruptedException : applicationCode() {
        throw new InterruptedException();
    }
This works as expected for methods which throws InterruptedException. Now I want to make it more general and addresses *all* methods which can throw an checked exception:
    after() returning throws Exception : applicationCode() {
        ...
    }
But here I got an error message ("can't throw checked exception 'java.lang.Exception' at this join point...") which is clear because the pointcut "applicationCode()" addresses e.g. an InterruptException.
Has anybody a hint or tip how I can realize it without defining an advice for each possible checked Exception?
regards
Oliver
_______________________________________________
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
 
Oliver Böhm
http://www.javatux.de