Estou usando Hibernate em uma aplicação Web e sempre que ocorre uma exceção de banco (HibernateException) eu encapsulo em uma Wrapper que criei (WebCommandException, apenas extende Exception) e lanço-a dentro da ServletException, fazendo o Tomcat exibir a página de erro default.
O que acontece é que só aparece a mensagem básica da exceção e não todo o stacktrace na tela. Tem alguma forma de visualizar isso?
Será que o log4j com HTMLAppender faz isso?
Stacktrace completo na página
A
1 Resposta
A
Consegui resolver esta questao após umas pesquisas no Google e criando uma classe que "encapsula" a exception, seja ela checked ou unchecked, em uma RuntimeException e fazendo com que o Servlet lance-a para o servidor. Desta forma nao se perde o Stacktrace. Diferente de se fazer: throw new ServletException(exception)
Depois criei uma pagina de erro JSP padrão e o servidor a exibe quando ocorrer uma exceção
Este é o codigo da classe da exception:public class WebCommandException extends RuntimeException {
Throwable throwable;
private WebCommandException(Throwable t) {
this.throwable = t;
}
/** Wraps another exeception in a RuntimeException. */
public static RuntimeException wrap(Throwable t) {
if (t instanceof RuntimeException)
return (RuntimeException) t;
return new WebCommandException(t);
}
public Throwable getCause() {
return this.throwable;
}
public void printStackTrace() {
this.throwable.printStackTrace();
}
}
<%@ page isErrorPage="true" import="java.io.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Erro</title>
</head>
<body>
<h1>Página de erro</h1>
<h2>Ocorreu um erro fatal</h2>
<pre>
<%
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
exception.printStackTrace(pw);
out.print(sw);
sw.close();
pw.close();
%>
</pre>
</body>
</html>
try {
....
catch (Exception e) {
throw WebCommandException.wrap(e);
}
Criado 7 de agosto de 2007
Ultima resposta 23 de ago. de 2007
Respostas 1
Participantes 1
Alura Git Flow: entenda o que é, como e quando utilizar Entenda o que é Git Flow, como funciona seu fluxo com branches como Master, Develop, Feature, Release e Hotfix, além de vantagens e desvantagens.
Casa do Codigo Desmistificando WebAssembly: Alta performance,... Por Raphael Amorim — Casa do Codigo