Hi Andy, thank you for your "advice". It will solve the problem. If I use:
declare soft : PersistException: mypointcut(); The woven code will look like that: try { try { throw new PersistException(); } catch (Exception exception) { ThrowDSExceptionAspect.aspectOf().ajc$afterThrowing$......(exception); throw exception; } } catch (PersistException persistexception) { if (persistexception instanceof RuntimeException) throw persistexception; else throw new SoftException(persistexception); } The "declare soft"-line will do just what i need: It avoids the unhandled-exception-error and the woven code is meaningless in this situation. The drop of bitterness is that i have to be very carefull with this solution. Couldn't we have a Solution without the "declare soft"-line? The "after() throwing" advice will catch the Persist-Exception. The Compiler does not need to generate an unhandled-exception-error. Your suggested compiler-change would take in account that if someone declares a method to throw some checked exceptions, he really wants to throw them in his code. I think nobody would expect that these exceptions will get softend. Thank you, Oliver 2012/5/24 Andy Clement > Hi, > > In your particular situation you could: > > declare soft : PersistException : mypointcut(); > > then the DSException wouldn't get softened. > > I did just prototype a compiler change that would mean the woven code > looked like this: > > try { > try { > throw new PersistException(); > } catch(Exception exception) { > > > ThrowDSExceptionAspect.aspectOf().ajc$afterThrowing$com_gid_bip_dataservice_aj_ThrowDSExceptionAspect$1$e66f2abe(exception); > throw exception; > } > } catch(Exception exception1) { > if(exception1 instanceof RuntimeException) > throw exception1; > else { > if (exception1 instanceof DSException) { // NEW CHECK, don't wrap > if OK to throw > throw exception1; > } else { > throw new SoftException(exception1); > } > } > } > > which also appears to get you what you want. The DSException is not > wrapped because it is declared to be thrown at the joinpoint. This > feels like a variation of declare soft though (so maybe a syntax > variation to request this behaviour) - and I'm not sure how often > users hit this scenario. Is the ability to control what is softened > through the declare soft type pattern sufficient for you? > > cheers, > Andy > > > On 24 May 2012 02:06, Straub Oliver wrote: > > Hello, > > there has been long discussions on checked vs. unchecked exceptions. > > I don't want to start this discussion again. > > > > I know, the opposite behaviour can be achieved by "declare soft ..." > > > > In my case i have to convert any exception to a layer-specific checked > > exception. > > This behaviour shall be controllable (on/off) with the presence of a > > method-annotation. > > Here an example: > > > > @DSExceptionTranslator > > private void anyMethod() throws DSException { > > throw new PersistException(); > > } > > > > Obvious the above code will normally generate an > unhandled-exception-error. > > I expected the following advice to solve that. > > > > after() throwing (Exception ex) throws DSException : mypointcut() { > > throw new DSException(ex); > > } > > > > But the unhandled-exception-error did not disappear! > > > > So i added a "declare soft": > > > > declare soft : Exception : mypointcut(); > > > > The unhandled-exception-error disappears, but this did not solve my > problem > > because the generated code looks like this: > > > > try { > > try { > > throw new PersistException(); > > } catch(Exception exception) { > > > > > ThrowDSExceptionAspect.aspectOf().ajc$afterThrowing$com_gid_bip_dataservice_aj_ThrowDSExceptionAspect$1$e66f2abe(exception); > > throw exception; > > } > > } catch(Exception exception1) { > > if(exception1 instanceof RuntimeException) > > throw exception1; > > else > > throw new SoftException(exception1); > > } > > > > As we can see, my new DSException is softened too and is thrown as a > > SoftException. > > It seems that the code for "declare soft" will always be weaved as last > > step. > > I tried "declare precedence" to control the weaving-process, but nothing > > changes! > > > > ==== Is there any other way to avoid the unhandled-exception-error? ==== > > > > I found similar Questions in several lists, but the solutions all did not > > work with the current release of AspectJ 1.6.12.M1 (ajdt 2.1.3). > > > > Thank you in advance > > > > > > _______________________________________________ > > aspectj-users mailing list > > aspectj-users@eclipse.org > > https://dev.eclipse.org/mailman/listinfo/aspectj-users > > > _______________________________________________ > aspectj-users mailing list > aspectj-users@eclipse.org > https://dev.eclipse.org/mailman/listinfo/aspectj-users >
_______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org https://dev.eclipse.org/mailman/listinfo/aspectj-users