web-dev-qa-db-fra.com

Exception Tomcat Vous ne pouvez pas appeler sendError () après la validation de la réponse?

En effectuant quelques opérations dans mon application, je me suis 

Java.lang.IllegalStateException Impossible d'appeler sendError () 

Lorsque je recharge la page à nouveau, cela fonctionne correctement pendant un certain temps, mais après un certain temps, il affiche la même exception. Comment puis-je surmonter cette exception? 

Ci-dessous est l'exception:

HTTP Status 500 - Cannot call sendError() after the response has been committed
type Exception report
message Cannot call sendError() after the response has been committed
description The server encountered an internal error that prevented it from fulfilling this request.
exception 
Java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
org.Apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.Java:451)
org.Apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.Java:725)
org.Apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.Java:485)
org.Apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.Java:395)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.40 logs.

Struts.xml

<struts>
    <package name="default" extends="hibernate-default">
        <action name="addUser" method="add" class="com.demo.action.UserAction">
            <result name="input">/register.jsp</result>
            <result name="success" type="redirect">list</result>
        </action>
        <action name="list" method="list" class="com.demo.action.UserAction">
            <interceptor-ref name="basicStackHibernate" />
            <result name="success">/list.jsp</result>
        </action>
    </package>
</struts>
21
user3117840

Cette erreur est le symptôme d'un autre problème, et non la cause première que vous recherchez.

Cette erreur explique pourquoi l'utilisateur ne peut pas être redirigé vers la page d'erreur. (Raison: le serveur a déjà vidé une partie du tampon de réponse au client - il est trop tard pour basculer/rediriger vers la page d'erreur.)

Comme le message d'erreur le souligne, consultez un autre endroit de vos journaux Apache Tomcat 7 (ou déboguez votre application autrement) pour rechercher ce qui génère une exception.

24
Barett

J'ai résolu cette erreur en ajoutant @jsonIgnore à tous les accesseurs pour une liste d'un autre objet

5
Mohamed

Je créais une relation @ManyToOne et @OneToMany. J'ai ajouté @JsonIgnore au-dessus de @ManyToOne et l'erreur a été résolue. 

2
Asad

Ceci est une erreur courante et il peut y avoir plusieurs causes principales pouvant être identifiées. Dans mon cas, j’ouvrais le fichier pdf à partir du service Web et pour cela j’effectuais une opération d’écriture dans un fichier en utilisant un tampon. Alors, veuillez changer ci-dessous:

        File outfile = File.createTempFile("temp", ".pdf");

        OutputStream os=new FileOutputStream(outfile);
        byte[] buffer = new byte[1024];

        int length;
        /*copying the contents from input stream to
         * output stream using read and write methods
         */
        while ((length = is.read(buffer)) > 0){
            os.write(buffer, 0, length);
        }

à

        File outfile = File.createTempFile("temp", ".pdf");
        IOUtils.copy(is, new FileOutputStream(outfile));

et après cela, je jouais au-dessous de l'opération:

    javax.ws.rs.core.Response.ResponseBuilder responseBuilder = javax.ws.rs.core.Response
                .ok(outfile, MediaType.APPLICATION_OCTET_STREAM);
                responseBuilder.header("content-type","application/pdf");

             return responseBuilder.build();

et l'erreur est résolue . 

1
Aman Goel

Pour les autres dans ma situation - Ce qui se passait, c’était que j’avais deux objets @Entity avec une relation plusieurs à plusieurs, ce qui provoquait la génération infinie de json, ce qui faisait que Spring Security lançait cette erreur. Essayez d’ajouter @JsonIgnore au-dessus de vos relations d’hibernation.

1
FlexEast

si vous utilisez des annotations telles que: @ WebFilter, @ WebServlet ..., ajoutez simplement metadata-complete = "true" dans le fichier web.xml e.g

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://Java.Sun.com/xml/ns/javaee" 
         xmlns:web="http://Java.Sun.com/xml/ns/javaee" 
         xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd" 
         id="WebApp_ID" metadata-complete="true" version="3.0">

J'espère que c'est votre besoin!

0
Derry

Vous pouvez essayer cette annotation qui aidera à résoudre le problème.

Cela vous aidera certainement s'il ne peut pas vous aider, puis essayez de le modifier selon vos besoins.

@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
   @JsonIdentityReference(alwaysAsId=true)
0
Dipen Chawla