From 4079c50f8a4dbf87c874d715302e6ff30323f682 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Garcia=20Nu=C3=B1ez?= Date: Wed, 1 Jan 2020 23:47:01 +0100 Subject: [PATCH] =?UTF-8?q?Mejora=20en=20la=20gesti=C3=B3n=20de=20excepcio?= =?UTF-8?q?nes=20en=20la=20p=C3=A1gina=20de=20error.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.sources/MyHealth/docroot/WEB-INF/web.xml | 2 +- .../src/managedbean/common/errorMBean.java | 39 +++++++++++++++---- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/1.sources/MyHealth/docroot/WEB-INF/web.xml b/1.sources/MyHealth/docroot/WEB-INF/web.xml index a8e0cc8..39d55e9 100644 --- a/1.sources/MyHealth/docroot/WEB-INF/web.xml +++ b/1.sources/MyHealth/docroot/WEB-INF/web.xml @@ -38,7 +38,7 @@ primefaces.THEME #{sessionPreferences.currentTheme} - + Faces Servlet diff --git a/1.sources/MyHealth/src/managedbean/common/errorMBean.java b/1.sources/MyHealth/src/managedbean/common/errorMBean.java index 38a8dec..c116df8 100644 --- a/1.sources/MyHealth/src/managedbean/common/errorMBean.java +++ b/1.sources/MyHealth/src/managedbean/common/errorMBean.java @@ -11,7 +11,7 @@ import javax.faces.context.FacesContext; import javax.inject.Named; import javax.servlet.http.HttpServletRequest; -import TO.VisitTO; +import common.Utils; /*** * @@ -24,6 +24,7 @@ public class errorMBean extends ManagedBeanBase implements Serializable { private static final long serialVersionUID = 1L; private String errorType; + private String errorMessage; private String requestURI; private boolean renderBack; @@ -37,16 +38,30 @@ public class errorMBean extends ManagedBeanBase implements Serializable { Map requestParams = fc.getExternalContext().getRequestParameterMap(); - this.errorType = this.getRequestParameter(requestParams,"type"); + this.errorType = this.getRequestParameter(requestParams, "type"); if (this.errorType.equals("") == true) { this.requestURI = this.getRequestAttribute(req, "javax.servlet.error.request_uri"); - + if (requestURI.equals("") == true) this.requestURI = req.getContextPath().concat("/home.xhtml"); - + setRenderBack(true); - this.errorType = this.getRequestAttribute(req, "javax.servlet.error.exception_type").replaceFirst("class ", ""); + Throwable rootCause = null; + Object obj = req.getAttribute("javax.servlet.error.exception"); + if (obj != null) { + Exception se = Exception.class.cast(obj); + + rootCause = Utils.getExceptionRootCause(se); + + if (rootCause != null) { + this.errorType = rootCause.getClass().getName(); + this.errorMessage = rootCause.getLocalizedMessage(); + } else { + this.errorType = se.getClass().getName(); + this.errorMessage = se.getCause().getLocalizedMessage(); + } + } // Si no hay error volvemos al home. if (this.errorType.equals("") == true) @@ -62,12 +77,12 @@ public class errorMBean extends ManagedBeanBase implements Serializable { case "java.net.ConnectException": case "javax.persistence.PersistenceException": this.errorType = "sql"; - this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Error interno del servidor", this.getRequestAttribute(req, "javax.servlet.error.message")); + this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Error en el acceso a la base de datos", this.errorMessage); break; default: this.errorType = "runtime"; - this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Error interno del servidor", this.getRequestAttribute(req, "javax.servlet.error.message")); + this.addFacesMessage(FacesMessage.SEVERITY_ERROR, "Error interno del servidor", this.errorMessage); } } } @@ -81,7 +96,7 @@ public class errorMBean extends ManagedBeanBase implements Serializable { else return ""; } - + private String getRequestParameter(Map pars, String paramName) { Object par = pars.get(paramName); @@ -115,4 +130,12 @@ public class errorMBean extends ManagedBeanBase implements Serializable { this.renderBack = renderBack; } + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + }