2010-01-06 17 views
6

que continuamente consigo debajo de error en mis WebLogic 10.3 registros de la consola¿Qué daño es causado por java.lang.IllegalStateException: Respuesta ya se ha comprometido

java.lang.IllegalStateException: Response already committed 
at weblogic.servlet.internal.ServletResponseImpl.objectIfCommitted(ServletResponseImpl.java: 
1462) 
at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:601) 
at org.apache.struts.action.RequestProcessor.processMapping(RequestProcessor.java:658) 
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:193) 
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) 

truncados. ver el archivo de registro para stacktrace completo

Me preguntaba qué daño puede causar esto si no se corrige? Este error ha estado en mi aplicación antes de unirme al equipo, ¿es esto lo suficientemente serio como para calificar como "Necesita solución inmediata"?

Respuesta

10

Struts es de código abierto. Sólo tienes que comprobar la fuente RequestProcessor previo a la línea 658 (como se señala en StackTrace):

// No mapping can be found to process this request 
String msg = getInternal().getMessage("processInvalid", path); 
log.error(msg); 
response.sendError(HttpServletResponse.SC_NOT_FOUND, msg); 

Ver el comentario: No mapping can be found to process this request. Esa es la causa raíz del problema. Pero la llamada sendError() para mostrar un mensaje de error no se puede completar también, porque la respuesta ya está confirmada. Aparentemente hay dos cosas que fallan: falta un mapeo y el trabajo predeterminado del mapeo de Struts ha sido retomado programáticamente de una manera incorrecta.

+0

(+1) mirando el código fuente de las bibliotecas es, en mi opinión, la mejor manera de depurar rápidamente los problemas que dependen del marco. – Bozho

0

Significa que la aplicación intentó enviar un encabezado HTTP después de que se envió la respuesta. Qué tipo de daño hace esto depende de la aplicación.

En la mayoría de los casos, el navegador puede tolerar un encabezado HTTP que falte pero, por ejemplo, si desea especificar un Content-Type especial, esto podría convertirse en un problema.

Sin embargo, le sugiero que encuentre la causa raíz del problema para evitar resultados confusos o "extraños".

0

Depende, el significado del error es que ha escrito en su objeto HttpResponse y comenzó a enviar la respuesta (llamando a flush(), sendError() o sendRedirect()) potencialmente cualquier adición a la secuencia de respuesta (o encabezados, etc.) o, de hecho, la acción subsiguiente (por ejemplo, usted llamó a flush() y ahora está llamando a sendError()) se perderá.

+0

Disculpe mi inexperiencia pero no lo entiendo con claridad. Nuestra aplicación de struts tiene alguna clase DispatchAction donde la lógica de negocio se ejecuta mediante clanes apropiados de BusinessDeleegators, una vez que todo está bien, el método retorna llamando a findForward en la instancia ActionMapping. ¿Ves un problema aquí ...? –

+1

No a menos que su lógica empresarial envíe mensajes a su objeto de respuesta. No estoy muy familiarizado con los puntales específicamente, así que realmente no puedo hacer una respuesta inteligente en ese nivel, todo lo que puedo decir es que, en mi experiencia con servlets básicos, he visto este error "cometiendo" el objeto de respuesta más de una vez. Lo siento, no puedo ser de más ayuda. –

Cuestiones relacionadas