Return-Path: X-Original-To: apmail-struts-commits-archive@minotaur.apache.org Delivered-To: apmail-struts-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3B1701085E for ; Sun, 16 Feb 2014 19:29:14 +0000 (UTC) Received: (qmail 46238 invoked by uid 500); 16 Feb 2014 19:29:07 -0000 Delivered-To: apmail-struts-commits-archive@struts.apache.org Received: (qmail 46139 invoked by uid 500); 16 Feb 2014 19:29:06 -0000 Mailing-List: contact commits-help@struts.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@struts.apache.org Delivered-To: mailing list commits@struts.apache.org Received: (qmail 46075 invoked by uid 99); 16 Feb 2014 19:29:05 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 16 Feb 2014 19:29:05 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id EF6BB8276FC; Sun, 16 Feb 2014 19:29:04 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: lukaszlenart@apache.org To: commits@struts.apache.org Date: Sun, 16 Feb 2014 19:29:08 -0000 Message-Id: <8f68a37e446647a39ff46057a55f374d@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [5/7] git commit: WW-3887 Extracts methods WW-3887 Extracts methods Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/701f0a06 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/701f0a06 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/701f0a06 Branch: refs/heads/develop Commit: 701f0a06d0f9ffb50ad9927e949d90e7f578a087 Parents: ef733aa Author: Lukasz Lenart Authored: Sun Feb 16 20:15:37 2014 +0100 Committer: Lukasz Lenart Committed: Sun Feb 16 20:15:37 2014 +0100 ---------------------------------------------------------------------- .../DefaultDispatcherErrorHandler.java | 108 +++++++++++-------- 1 file changed, 61 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/701f0a06/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java b/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java index b09c890..c093402 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/DefaultDispatcherErrorHandler.java @@ -20,6 +20,10 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +/** + * Default implementation of {@link org.apache.struts2.dispatcher.DispatcherErrorHandler} + * which sends Error Report in devMode or {@link javax.servlet.http.HttpServletResponse#sendError} otherwise. + */ public class DefaultDispatcherErrorHandler implements DispatcherErrorHandler { private static final Logger LOG = LoggerFactory.getLogger(DefaultDispatcherErrorHandler.class); @@ -50,61 +54,71 @@ public class DefaultDispatcherErrorHandler implements DispatcherErrorHandler { public void handleError(HttpServletRequest request, HttpServletResponse response, int code, Exception e) { Boolean devModeOverride = FilterDispatcher.getDevModeOverride(); if (devModeOverride != null ? devModeOverride : devMode) { - if (LOG.isDebugEnabled()) { - LOG.debug("Exception occurred during processing request: #0", e, e.getMessage()); - } - try { + handleErrorInDevMode(response, code, e); + } else { + sendErrorResponse(request, response, code, e); + } + } - List chain = new ArrayList(); - Throwable cur = e; - chain.add(cur); - while ((cur = cur.getCause()) != null) { - chain.add(cur); + protected void sendErrorResponse(HttpServletRequest request, HttpServletResponse response, int code, Exception e) { + try { + // WW-1977: Only put errors in the request when code is a 500 error + if (code == HttpServletResponse.SC_INTERNAL_SERVER_ERROR) { + // WW-4103: Only logs error when application error occurred, not Struts error + if (LOG.isErrorEnabled()) { + LOG.error("Exception occurred during processing request: #0", e, e.getMessage()); } + // send a http error response to use the servlet defined error handler + // make the exception available to the web.xml defined error page + request.setAttribute("javax.servlet.error.exception", e); - HashMap data = new HashMap(); - data.put("exception", e); - data.put("unknown", Location.UNKNOWN); - data.put("chain", chain); - data.put("locator", new Dispatcher.Locator()); - - Writer writer = new StringWriter(); - template.process(data, writer); - - response.setContentType("text/html"); - response.getWriter().write(writer.toString()); - response.getWriter().close(); - } catch (Exception exp) { - try { - if (LOG.isDebugEnabled()) { - LOG.debug("Cannot show problem report!", exp); - } - response.sendError(code, "Unable to show problem report:\n" + exp + "\n\n" + LocationUtils.getLocation(exp)); - } catch (IOException ex) { - // we're already sending an error, not much else we can do if more stuff breaks - } + // for compatibility + request.setAttribute("javax.servlet.jsp.jspException", e); } - } else { + + // send the error response + response.sendError(code, e.getMessage()); + } catch (IOException e1) { + // we're already sending an error, not much else we can do if more stuff breaks + } + } + + protected void handleErrorInDevMode(HttpServletResponse response, int code, Exception e) { + if (LOG.isDebugEnabled()) { + LOG.debug("Exception occurred during processing request: #0", e, e.getMessage()); + } + try { + List chain = new ArrayList(); + Throwable cur = e; + chain.add(cur); + while ((cur = cur.getCause()) != null) { + chain.add(cur); + } + + Writer writer = new StringWriter(); + template.process(createReportData(e, chain), writer); + + response.setContentType("text/html"); + response.getWriter().write(writer.toString()); + response.getWriter().close(); + } catch (Exception exp) { try { - // WW-1977: Only put errors in the request when code is a 500 error - if (code == HttpServletResponse.SC_INTERNAL_SERVER_ERROR) { - // WW-4103: Only logs error when application error occurred, not Struts error - if (LOG.isErrorEnabled()) { - LOG.error("Exception occurred during processing request: #0", e, e.getMessage()); - } - // send a http error response to use the servlet defined error handler - // make the exception availible to the web.xml defined error page - request.setAttribute("javax.servlet.error.exception", e); - - // for compatibility - request.setAttribute("javax.servlet.jsp.jspException", e); + if (LOG.isDebugEnabled()) { + LOG.debug("Cannot show problem report!", exp); } - - // send the error response - response.sendError(code, e.getMessage()); - } catch (IOException e1) { + response.sendError(code, "Unable to show problem report:\n" + exp + "\n\n" + LocationUtils.getLocation(exp)); + } catch (IOException ex) { // we're already sending an error, not much else we can do if more stuff breaks } } } + + protected HashMap createReportData(Exception e, List chain) { + HashMap data = new HashMap(); + data.put("exception", e); + data.put("unknown", Location.UNKNOWN); + data.put("chain", chain); + data.put("locator", new Dispatcher.Locator()); + return data; + } }