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