pudo - java.lang.illegalstateexception: no puedo llamar a sendredirect() tras llevar a cabo la respuesta
Excepción de Tomcat ¿No puede llamar a sendError() después de que se haya confirmado la respuesta? (7)
Mientras hacía algunas operaciones en mi aplicación conseguí
java.lang.IllegalStateException No se puede llamar a sendError ()
Cuando recargo la página de nuevo, funciona un tiempo correctamente, pero después de un tiempo vuelve a aparecer la misma excepción. ¿Cómo puedo superar esta excepción?
A continuación se muestra la excepción:
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>
Este error es un síntoma de algún otro problema, no la causa raíz que está buscando.
Este error explica por qué el usuario no puede ser redirigido a la página de errores. (Motivo: el servidor ya ha vaciado parte del búfer de respuesta al cliente; es demasiado tarde para cambiar / redirigir a la página de error).
Como lo indica el mensaje de error, verifique en otra parte de sus registros de Apache Tomcat 7 (o depure su aplicación de otra manera) para encontrar lo que está generando una excepción.
Este es un error común y puede haber varias causas raíz que pueden ser identificadas. En mi caso, estaba abriendo un archivo pdf desde el servicio web y para ello estaba realizando la operación de escritura en un archivo utilizando el búfer. Tan amablemente cambiar a continuación:
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);
}
a
File outfile = File.createTempFile("temp", ".pdf");
IOUtils.copy(is, new FileOutputStream(outfile));
y después de esto estuve realizando la siguiente operación:
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();
y el error se resuelve. ¡Aclamaciones!
He superado la excepción, puede verificar la estructura de la tabla. Ejecuto la consulta SQL producida por hibernación en mysql. Como excepción, se lanzó una excepción.
[Err] 1054 - Unknown column ''this_.ID'' in ''field list''
Encontré que falta un ID de campo en la tabla. Agregue el ID en la tabla, está bien. Espero que sea de ayuda.
Para otros en mi situación: lo que estaba sucediendo era que tenía dos objetos @Entity con una relación de muchos a muchos que causaban que se generara un json infinito, lo que provocaba que la seguridad Spring lanzara este error. Intente agregar @JsonIgnore sobre sus relaciones de hibernación.
Puede probar esta anotación que ayudará, ya que solucionó mi problema.
Definitivamente, será útil si no puede ayudarle, luego intente modificar esto según sus requisitos.
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
@JsonIdentityReference(alwaysAsId=true)
Si usa anotaciones como: @ WebFilter, @ WebServlet ..., simplemente agregue metadata-complete = "true" en web.xml, por ejemplo
<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">
Espero que esta sea tu necesidad!
@jsonIgnore
este error agregando @jsonIgnore
a todos los @jsonIgnore
para una Lista de otro objeto