2016-03-21 1 views
0

J'utilise Jetty 9.3.3. Je mis en œuvre ma classe de gestionnaire d'erreur personnalisé, la méthode de la poignée a été appelée, mais ne vois pas pourquoi ne pas causer objet Throwable est obtenu:Jetée personnalisée La classe du gestionnaire d'erreurs est appelée mais aucun objet ne peut être lancé.

Voici le code de ma classe:

public class TestExecuterServerErrorHandler extends ErrorHandler{ 

    private Logger logger=Logger.getLogger(this.getClass().getName()); 

    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException{ 
     logger.systemWriteOutput("handeling error", 3); 

     ByteArrayISO8859Writer writer= new ByteArrayISO8859Writer(4096); 
     Throwable th = (Throwable)request.getAttribute(RequestDispatcher.ERROR_EXCEPTION); 

     response.setContentType("text/xml"); 

     if(th!=null) 
     { 
      writeResponseError(response.getStatus(), th, writer); 
      th.printStackTrace(); 
     } 

     writer.flush(); 
     response.setContentLength(writer.size());  
     writer.writeTo(response.getOutputStream()); 
     writer.destroy();   
    } 
} 

La sortie:

Comment puis-je imprimer la cause de l'appel de la méthode de poignée?
handeling error 
handeling error 

Répondre

0

J'ai eu le même problème en utilisant Jetty et Jersey. Je l'ai résolu en affectant l'attribut ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR à true, empêchant Jersey de renvoyer la réponse prématurément (avant d'attacher l'exception à l'objet de requête).