kog
kog copied to clipboard
Handle ResponseBody.Writer failure
Since a ResponseBody.Writer is piped to the jetty response object after the kog response is returned from the handler, if the writer throws an error, then kog (e.g. the user's custom error handler) does not handle it. Jetty handles it and displays a blank 500 response.
This is the logic right now:
val request = kog.Request.fromServletRequest(jettyServletRequest)
val response = handler(request)
response.body.pipe(jettyServletResponse)
For instance, Pebble (http://www.mitchellbosecke.com/pebble/home) writes a to Writer.
val template: PebbleTemplate = engine.getTemplate(path)
return Response().writer("text/html") { writer -> template.evaluate(writer, data) }
So if there's an error in the template, like {{ doesNotExist() }}, then you'll get a blank Jetty 500 page.