1. I would rather add proper directives instead of macros and
uberspector hacks: http://stackoverflow.com/q/159292/620249

2. So far it has been the job of our scriptable wrappers to catch
exceptions, does this proposal mean that:
a. We should stop doing that and write try-catch logic in our
templates/scripts? IOW, catching exceptions in wrappers is a bad design
pattern?
b. We didn't do that enough, and as a workaround we're adding exception
handling in Velocity?

On 09/18/2014 09:28 AM, [email protected] wrote:
> Hi Devs,
> 
> Example of a use case:
> 
> * In contentview.vm we need to be able to catch when getRenderedContent() 
> throws an exception in order to be able to still display the page title, 
> content menu and last modification line. We want only the content part to 
> display an error.
> 
> I’ve tried implementing the following:
> * Modified Document.getRenderedContent() to not throw exceptions any more
> * I’ve added Document.setError() and getError()
> * Then added a #displayRenderedContent($renderedContent) velocimacro to 
> display an error, calling Document.getError()
> 
> However that’s no good because we have lots of places in our code (and in 
> extensions we don’t control) that call getRenderedContent() and they expect 
> the whole page rendering to fail in case of an error…
> 
> Thus after discussing quickly on IRC and with Thomas we’d like to propose 
> instead:
> 
> * Add a new #try() velocimacro that would push a new empty List<Exception> in 
> the Execution Context to a Stack variable
> * Add a new uberspector that would, based on this flag do a try/catch around 
> the method called (can be done easily by returning a custom VelMethod)
> * The uberspector catch would add the exception to the List<Exception> in the 
> Execution Context
> * Add a new #catch() velocimacro that would pop from the Stack in the 
> Execution Context and that would set 2 variables in the Velocity Context:
> ** $exception: the first exception
> ** $exceptions: the list of all exceptions that happened between the #try() 
> and #catch()
> 
> The good part with this is:
> * No change in behavior to all existing code
> * Code that want to do something in case of error can do it using 
> #try()/#catch() for java methods throwing exceptions (like 
> getRenderedContent())
> 
> Of course for the future we would need to decide if script services should 
> stop doing try/catch or not but that’s another debate I’d prefer to separate 
> from this thread.
> 
> WDYT?
> 
> Thanks
> -Vincent
> 
> 
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
> 


-- 
Sergiu Dumitriu
http://purl.org/net/sergiu
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to