2013-08-14 18 views
6

Quando si aggiunge/aggiornamento un'intestazione di risposta dopo che la richiesta è stata elaborata ottengo il seguente avvertimento:Risposta già impegnata quando si utilizza 3.x di primavera su Websphere 8.5

com.ibm.ws.webcontainer.srt.SRTServletResponse setHeader SRVE8094W: WARNING: Cannot set header. Response already committed. 

Sto cercando di manipolare il colpo di testa di chiamando httpServletResponse.setHeader() o httpServletResponse.addHeader() dall'interno di un filtro servlet dopo filterChain.doFilter() o dall'intercettore di codice molla postHandle.

Ho riscontrato questo problema durante l'esecuzione della mia webapp utilizzando spring 3.x su websphere 8.5.

Il problema non viene riprodotto su tomcat 7.0, quindi suppongo che sia correlato a Websphere. Il problema non è riprodotto in un'app servlet pura, quindi suppongo che sia legata alla primavera.

mi è familiare

ShallowEtagHeaderFilter does not work under WAS8 app server

e con

Cannot set header in JSP. Response already committed

ma cerco per una soluzione più "pulito".

Qualcuno può aiutarmi in questo?

+0

È possibile modificare il filtro per racchiudere l'oggetto 'HttpServletResponse' con il proprio che non svuota le intestazioni e' OutputStream' fino a un momento specifico, ad es. quando il filtro ritorna da 'doFilter()'. –

+0

Grazie, ma attualmente non sto cercando una soluzione alternativa, e poiché penso che sia un problema di Spring-Websphere, spero ancora che ci sia una soluzione per questo. –

+0

Non puoi impostare l'intestazione prima di 'doFilter()'? –

risposta

-1

Websphere segue rigorosamente lo standard J2EE, quindi qualsiasi cosa funzioni in Tomcat non deve necessariamente funzionare in Websphere. Nel mio progetto, ho ricevuto molte eccezioni/errori che sono particolari per Websphere, ma funziona come un fascino in Tomcat. Ti suggerisco di impostare l'intestazione nel controller. Un'altra alternativa non è lo svuotamento del flusso di output nel controller (se lo si è fatto esplicitamente).