Exception JSF - Exibir StackTrace

0 respostas
S

Boa noite pessoal

Na minha aplicação, criei uma classe ExceptionHandler que direciona para uma página de erro quando ocorre uma exception.

public class ExceptionHandler extends ActionListenerImpl {

    @Override
    public void processAction(ActionEvent event) {
            // Obtem o contexto JSF
            FacesContext context = FacesContext.getCurrentInstance();
            
            try {
                    // Executa o método da classe Pai
                    super.processAction(event);
            } catch (Exception e) {
                    // Se ocorrer um erro inesperado, exibe a mensagem abaixo
                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, e.getMessage(), null));
                    // Redireciona para a pagina com o mapeamento 'erro' no faces-config.
                    context.getApplication().getNavigationHandler().handleNavigation(
                                    context, null, "erro");
            }
    }
}

inclui o trecho abaixo no meu faces-config para direcionar meu actionlistner:

<application>
        <action-listener>sigaeweb.Conversores.ExceptionHandler</action-listener>
	<view-handler>com.icesoft.faces.facelets.D2DFaceletViewHandler</view-handler>
        <locale-config>
          <default-locale>pt-br</default-locale>
          <supported-locale>pt_br</supported-locale>
        </locale-config>
        <message-bundle>sigaeweb.Conversores.mensagens.Mensagens</message-bundle>
    </application>

minha classe ErroFace

public class ErroFace extends Throwable{

    private String msg;

    public String getMsg() {
        msg = null;
        msg = GetStackTraceAsString.getStackTrace(this);
        return msg;
    }

    public void setMsg(String Msg) {
        this.msg = Msg;
    }
}

meu conversor para retornar o stacktrace como string:

public class GetStackTraceAsString {

   public static String getStackTrace(Throwable throwable) {
     Writer writer = new StringWriter();
     PrintWriter printWriter = new PrintWriter(writer);
     throwable.printStackTrace(printWriter);
     return writer.toString();
     }

     public static void main (String[]args){
     final Throwable throwable = new IllegalArgumentException();
     System.out.println(getStackTrace(throwable));
    }
}

minha pagina de erro:

<jsp:root xmlns:ui="http://java.sun.com/jsf/facelets" version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:ice="http://www.icesoft.com/icefaces/component">
<jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"/>
<ice:outputDeclaration doctypeRoot="HTML" doctypePublic="-//W3C//DTD HTML 4.01 Transitional//EN" doctypeSystem="http://www.w3.org/TR/html4/loose.dtd" />
<f:view>
<html>
<head>

    <title>SIGAE - erro</title>

</head>

 <body bgcolor="#E6FEFF">
     <h:form><br/><br/><br/>
         <div style="font-family: Arial, Helvetica, sans-serif; font-size: 11pt;" align="center">Erro<br/><br/>
             <ice:messages/>
             <ice:commandButton value="principal" action="gotoMain"/><br/><br/>
             <ice:outputText value="#{ErroFace.msg}"/>
         </div>
     </h:form>
 </body>
</html>
</f:view>
</jsp:root>

A mensagem é exibida, e o stacktrace é traduzido para string, no entanto, o stacktrace apresentado não é o do erro original. O stacktrace apresentado refere-se sempre a classe sigaeweb.ManagedBeans.ErroFace

segue abaixo um trecho do stacktrace exibido na pagina de erro:

sigaeweb.ManagedBeans.ErroFace at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at java.lang.Class.newInstance0(Class.java:355) 
at java.lang.Class.newInstance(Class.java:308) 
at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:185) ...
Criado 1 de fevereiro de 2011
Respostas 0
Participantes 1