[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 メーリングリストの案内