2010-01-06 7 views
6

io continuo ottengo sotto l'errore sul mio WebLogic 10.3 log della consoleChe male è causato da java.lang.IllegalStateException: Risposta già impegnata

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) 

troncato. vedere il file di registro per stacktrace completo

Mi chiedevo quale danno è causato da questo se non è stato risolto? Questo errore è stato nella mia app prima di entrare a far parte del team, è abbastanza grave da qualificarsi come "Richiede una soluzione immediata"?

risposta

10

Struts è open source. Basta controllare la fonte RequestProcessor prima linea 658 (come indicato nella 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); 

Vedere il commento: No mapping can be found to process this request. Questa è la causa principale del problema. Ma la chiamata sendError() per visualizzare un messaggio di errore non può essere completata, perché la risposta è già stata confermata. Apparentemente ci sono due cose un fallimento: manca una mappatura e il lavoro di default della mappatura di Struts è stato preso a livello di codice in maniera errata.

+0

(+1) esaminare il codice sorgente delle biblioteche è a mio avviso il modo migliore per eseguire rapidamente il debug dei problemi dipendenti dal framework. – Bozho

0

Significa che l'applicazione ha tentato di inviare un'intestazione HTTP dopo che la risposta è stata inviata. Che tipo di danno questo dipende dall'applicazione.

La maggior parte delle volte un'intestazione HTTP mancante può essere tollerata dal browser ma, ad esempio, se si desidera specificare uno speciale Content-Type, questo potrebbe diventare un problema.

Tuttavia, suggerisco di trovare la causa principale del problema per evitare risultati confusi o "strani".

0

Dipende, il significato dell'errore è che si è scritto sull'oggetto HttpResponse e si è iniziato a inviare la risposta (richiamando flush(), sendError() o sendRedirect()) così potenzialmente eventuali aggiunte al flusso di risposta (o intestazioni ecc.) o in effetti l'azione successiva (ad esempio, hai chiamato flush() e ora stai chiamando sendError()) richiesta verrà persa.

+0

Perdona la mia inesperienza, ma non lo capisco chiaramente. La nostra app struts ha una classe DispatchAction in cui la logica di business viene eseguita clalando BusinessDeleegator appropriati, una volta che tutto è a posto, il metodo restituisce chiamando findForward sull'istanza ActionMapping. Vedi un problema qui ..? –

+1

A meno che la logica aziendale non invii messaggi al proprio oggetto risposta. Non ho molta familiarità con le puntine in modo specifico, quindi non posso davvero fare una risposta intelligente a quel livello, tutto quello che posso dire è che nella mia esperienza con servlet di base ho visto questo errore "impegnando" l'oggetto risposta più di una volta. Scusa, non posso esserti di maggior aiuto. –