[Seasar-user:11860] Re: 「Cannot set header. Response already committed.」という警告
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2007年 11月 29日 (木) 23:00:07 JST
小林 (koichik) です.
Date: Thu, 29 Nov 2007 20:36:17 +0900
From: Oishi Shingo <[E-MAIL ADDRESS DELETED]>
To: "'[E-MAIL ADDRESS DELETED]'" <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:11858] Re: 「Cannot set header. Response already committed.」という警告
> WebSphereが警告を出力しているので、IBMサポートに問合せをし、ログの解析を行いました。
> サポートより以下の回答をもらっています。
>
> >ページヘッダーへContentLengthを2回セットしているために警告が発生しております。
> >ContentLengthが一度セットされているにもかかわらず、forward先の
> >/gatewayにて再度ContentLengthをセットしようとした際に警告メッセージが出力されております。
> この動作が原因でWebSphereが警告を出しているようです。
>
> このContentLengthのセットに関しては、特にこちらのアプリケーションで意識していないため、
> S2Flexの内部動作に関係があるのではないかと考えております。内部動作としてそのような
> 挙動がないかご教示いただけないでしょうか?
結局,スタックトレースは出てないのでしょうか?
だとしたら,以下のような Filter を作って web.xml で
先頭に定義することで,誰が setContentLength() を
呼び出しているか分かるかも.
public class MyFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse responseWrapper =
new HttpServletResponseWrapper((HttpServletResponse) response) {
public void setContentLength(int len) {
Thread.dumpStack();
super.setContentLength(len);
}
});
chain.doFilter(request, responseWrapper);
}
//init & destroy
}
# 例によってメーラで書いただけなのでコンパイルさえ
# 通らないかもしれませんがご容赦ください.
--
<signature>
<name>Koichi Kobayashi</name>
<e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>
Seasar-user メーリングリストの案内