[seasar-dotnet:163] [S2Dao.NET]戻り値がエンティティ配列の場合、InvalidCastException

Ryo Miyagi rmiyax @ yahoo.co.jp
2006年 4月 1日 (土) 15:42:35 JST


宮城です。

S2Dao.NET 0.4.0の
検索(SELECT)処理で戻り値の型がエンティティ型の配列の場合、
下記の例外が発生します。

Seasar.Framework.Unit.S2FrameworkTestCaseRunner: DEBUG 2006-04-01 15:01:17,249 [1044] 例外が発生しました。理由はSystem.Reflection.TargetInvocationException: 呼び出しのターゲットが例外をスローしました。 ---> System.InvalidCastException: 引数の戻り値の型が無効です。
   at System.Runtime.Remoting.Proxies.RealProxy.ValidateReturnArg(Object arg, Type paramType)
   at System.Runtime.Remoting.Proxies.RealProxy.PropagateOutParameters(IMessage msg, Object[] outArgs, Object returnValue)
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Tests.Dao.Bean.ITypeTableDao.GetAllDtos2()

おそらく、Seasar.Dao.Impl.DaoMetaDataImpl.CreateDataReaderHandler()
メソッドで戻り値の型が配列の場合に生成するDataReaderHandlerが
BeanListMetaDataDataReaderHandlerであることが原因と思われます。

お手数ですが、下記の内容でソースを修正していただけないでしょうか?
protected IDataReaderHandler CreateDataReaderHandler(MethodInfo mi)
{
    // 配列型もIListインターフェースを所有しているので、先に条件分岐
    if (mi.ReturnType.IsArray)
        return new BeanArrayMetaDataDataReaderHandler(beanMetaData);
    else if(typeof(IList).IsAssignableFrom(mi.ReturnType))
        return new BeanListMetaDataDataReaderHandler(beanMetaData);
    else if(IsBeanTypeAssignable(mi.ReturnType))
        return new BeanMetaDataDataReaderHandler(beanMetaData);
    else
        return new ObjectDataReaderHandler();
}


--------------------------------------
Celebrate Yahoo! JAPAN 10th Anniversary
http://pr.mail.yahoo.co.jp/10thann/


seasar-dotnet メーリングリストの案内