Mejora en la gestión de excepciones en la página de error.

This commit is contained in:
Marcos Garcia Nuñez
2020-01-01 23:47:01 +01:00
parent 75ed5e2635
commit 4079c50f8a
2 changed files with 32 additions and 9 deletions

View File

@@ -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,7 +38,7 @@ public class errorMBean extends ManagedBeanBase implements Serializable {
Map<String, String> 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");
@@ -46,7 +47,21 @@ public class errorMBean extends ManagedBeanBase implements Serializable {
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);
}
}
}
@@ -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;
}
}