[Seasar-user:1005] S2DAOで、戻り値を配列ビーンで返すケースにも対応してほしい。

Taro Kato kato
2004年 9月 14日 (火) 19:32:08 JST


比嘉さん、こんにちわ。グルージェント加藤です。

S2DAOで、Listだけでなく、BeanClass[] を返す selectメソッドの
対応を検討してほしいなぁと考えています。

AXISのサービスクラスにS2DAOインターフェースをダイレクトに
乗っけられないかを試行錯誤中なんですが、ビーン配列であれば、
WSDDにビーンクラス定義の1行を追加するだけで、Webサービスの
クライアントに構造体のように渡せるようになるからです。
Listだとシリアライズになり、Javaクライアントが必須となるので
うまくないんです。

AXISに対してどこでコンテナを引かせるかの修正箇所は、これからの
調査次第なんですが、S2DAOに対しては、以下の修正を加えるだけで
行けると思いますので、対応を考えていただけないでしょうか。

TYPOにも効果(キャストミスを防ぐ)があると思います。

よろしくお願いします。 m(_ _)m

----------------------------------------------------------------
org.seaser.dao.impl.DaoMetaDataImpl クラスの改造
  createResultSetHandler メソッドに以下を追加。
  
    } else if (method.getReturnType().isAssignableFrom(
               Array.newInstance(beanClass_, 0).getClass())) {
        return new BeanArrayMetaDataResultSetHandler(beanMetaData_);
    }


org.seaser.dao.impl.BeanArrayMetaDataResultSetHandler クラスの作成

package org.seasar.dao.impl;
import java.sql.SQLException;

public class BeanArrayMetaDataResultSetHandler extends
                     BeanListMetaDataResultSetHandler {
    public BeanArrayMetaDataResultSetHandler(BeanMetaData beanMetaData) {
        super(beanMetaData);
    }
    public Object handle(ResultSet rs) throws SQLException {
        List list = (List)super(rs);
        return list.toArray((Object[])Array.newInstance(
                            getBeanMetaData().getBeanClass(), 0));
    }
}
----------------------------------------------------------------


[[[[[[[[[[[[[[[[[[[[[[ G l u e g e n t , I n c .
[[[[[[[[[[     [[[[[[[
[[[[[[      [[[[[[[[[[
[[[[      [[[[[[[[[[[[    http://www.gluegent.com/
[[      [[[[[[    [[[[
[[[         [[[[   [[[ System Development Division
[[[[[[[[[[[[[[   [[[[[
[[[[[[[[[[[[   [[[[[[[    T a r o  K a t o
[[[[[[[[[[  [[[[[[[[[[





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