From 74357c15c69883572a19b0b0130379549237a6eb Mon Sep 17 00:00:00 2001 From: ryounes Date: Wed, 3 Aug 2011 15:43:20 +0000 Subject: [PATCH] NIHVIVO-3088 Display generic error page rather than white screen when there's a processing error in a freemarker controller. --- .../freemarker/FreemarkerHttpServlet.java | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java index efad50c02..2c51b8017 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java @@ -78,9 +78,11 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { super.doGet(request,response); + VitroRequest vreq = new VitroRequest(request); + ResponseValues responseValues = null; + try { - VitroRequest vreq = new VitroRequest(request); - + Configuration config = getConfig(vreq); vreq.setAttribute("freemarkerConfig", config); @@ -89,13 +91,26 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { return; } - ResponseValues responseValues = processRequest(vreq); + responseValues = processRequest(vreq); doResponse(vreq, response, responseValues); - } catch (TemplateProcessingException e) { - log.error(e.getMessage(), e); - } catch (Throwable e) { - log.error("FreeMarkerHttpServlet could not forward to view.", e); + } catch (Throwable e) { + if (e instanceof IOException || e instanceof ServletException) { + try { + throw e; + } catch (Throwable e1) { + handleException(vreq, response, e); + } + } + handleException(vreq, response, e); + } + } + + protected void handleException(VitroRequest vreq, HttpServletResponse response, Throwable t) throws ServletException { + try { + doResponse(vreq, response, new ExceptionResponseValues(t)); + } catch (TemplateProcessingException e) { + throw new ServletException(); } }