On 11 Jul 2013, at 16:08, Vincent Blondeau <[email protected]> wrote:
> Le 11/07/2013 15:42, Sven Van Caekenberghe a écrit : >> Vincent, >> >> On 11 Jul 2013, at 15:06, Vincent Blondeau >> <[email protected]> wrote: >> >>> I use a Zinc Server. So when I do the request, Zinc catch the Exception and >>> send an error as response. >> ZnSingleThreadedServer>>#handleRequestProtected: request >> "Handle request and return a response. >> If a Smalltalk Error is thrown, return a HTTP Server Error response." >> >> ^ [ self authenticateAndDelegateRequest: request ] >> on: Error >> do: [ :exception | >> self debugMode >> ifTrue: [ exception pass ] >> ifFalse: [ >> self logServerError: exception. >> ZnResponse serverError: exception >> printString ] ] >> >> AFAICT this code catches Error, not Exception, hence it would let >> Notification through. No ? >> >> Sven >> >> > Indeed but I use the Zinc-Rest-Server and all Exceptions are caught: > > ZnRestServerDelegate>>handleRequest: request > | call | > (call := self match: request) > ifNil: [ ^ self noHandlerFound: request ]. > (self authenticate: call) > ifFalse: [ ^ self callUnauthorized: request ]. > ^ [ self execute: call ] > on: Exception > do: [ :exception | > request server debugMode > ifTrue: [ exception pass ] > ifFalse: [ > request server logServerError: exception. > self serverError: request exception: exception ] ] > Indeed. I know why I wrote that (I often write assertions in code, and AssertionFailed is not an Error, hence the broader net) - I will think about it. In the mean time, you could subclass ZnRestServerDelegate and override #handleRequest: Maybe I can also improve the overriding options a bit, like with an introduction of an #exceptionsToCatch accessor. HTH, Sven -- Sven Van Caekenberghe Proudly supporting Pharo http://pharo.org http://association.pharo.org http://consortium.pharo.org
