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 <[email protected]> > 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 >>> [email protected] >>> https://dev.eclipse.org/mailman/listinfo/aspectj-users >>> >> >> _______________________________________________ >> aspectj-users mailing list >> [email protected] >> https://dev.eclipse.org/mailman/listinfo/aspectj-users >> > > -- > Oliver Böhm > http://www.javatux.de > > _______________________________________________ > 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
