[cubby-user:74] Re: CubbyTestCase における、InternalForwardRequest のコピーについてのご報告

AGATA Toshitaka [E-MAIL ADDRESS DELETED]
2008年 6月 17日 (火) 15:16:34 JST


染田さん

縣です。

> 上記で Beans.copy をしているのですが、その際に serverName や
> serverPort、scheme など、諸々の情報が、
MockHttpServletContext#createRequest
> で生成されている、MockHttpServletRequestImpl のデフォルト値によって上
書きされています。

ご報告ありがとうございます。
確かに、ご指摘の問題が発生しますね。
ここはもともと、内部フォワードをエミュレートするために、
MockHttpServletRequestImplのservletPathとqueryStringを
書き換えるために、このように面倒なことやっています。

ひとまず、手元では解決されているとのことですので、
1.0.4でいただいたコードのものを適用したいと思います。
1.0.4のリリースはリリースできるバグフィックスがある程度
たまってからおこなおうと考えています。

また、来月あたりに、少し機能強化をおこなったCubby1.1を
リリースする予定です。
内部フォワードの実装方式を変更する予定ですので、
1.1リリース時には、この問題は解決してリリースします。

Takashi Someda さんは書きました:
> 染田です。
> 
> またまた懲りずにテストネタですみません。。。
> 
> CubbyTestCase#routing 内で行われている、InternalForwardRequest
> から、S2TestCase 内の MockHttpServletRequestImpl へのコピーについて
> ご報告です。
> 
> 上記で Beans.copy をしているのですが、その際に serverName や
> serverPort、scheme など、諸々の情報が、MockHttpServletContext#createRequest
> で生成されている、MockHttpServletRequestImpl のデフォルト値によって上書きされています。
> 
> その為、アクションの中で、上記のような情報に基づいて行き先を振り分けるような
> 処理をしている部分で意図どおりのテストが出来ない部分がありました。
> # ちなみに、私はアプリケーション内のリファラであるかを、ヘッダや諸々から判別し
> # 行き先を振り分ける処理をアクションレイヤでしているところで捕まりました。
> 
> 手元では、
> 
>     private static String[] EXCLUDES_PROPERTIES;
>     static {
>         List<String> list = new ArrayList<String>();
>         BeanDesc beanDesc =
> BeanDescFactory.getBeanDesc(MockHttpServletRequestImpl.class);
>         for (int i = 0; i < beanDesc.getPropertyDescSize(); i++) {
>             PropertyDesc propDesc = beanDesc.getPropertyDesc(i);
>             if (propDesc.isReadable() && propDesc.isWritable()) {
>                 String propName = propDesc.getPropertyName();
>                 if(!"queryString".equals(propName)){
>                     list.add(propDesc.getPropertyName());
>                 }
>             }
>         }
>         EXCLUDES_PROPERTIES = list.toArray(new String[list.size()]);
>     }
> 
> のような感じで、コピー対象外のプロパティを集めた後(queryString は除外/setter/getter
> があるもののみ)、routing 内での Beans.copy を
> 
>         Beans.copy(internalForwardRequest, getRequest())
>                 .excludes(EXCLUDES_PROPERTIES)
>                 .execute();
> 
> として回避しています。
> 
> Cubby 1.0.2 で確認しました。
> # ざっとソースを確認したところ 1.0.3 でも出るようにも思います。
> ケースとしては、少ないのかもしれませんが、コントローラレイヤ
> ですので、この辺りのリクエストの情報を参照して処理するケースも
> あるのかな、と思いご報告させてもらいました。
> 
> 以上です。


-- 
-------------------------------
株式会社ヌーラボ 縣 俊貴
Mail : [E-MAIL ADDRESS DELETED]
HP   : http://www.nulab.co.jp/
TEL  : 03-5766-6256(東京)
      092-724-0020(福岡)
-------------------------------


cubby-user メーリングリストの案内