[seasar-dotnet:187] [S2Container.NET]propertyタグに,(コンマ)を含む文字列を指定でFileLoadException

Ryo Miyagi rmiyax @ yahoo.co.jp
2006年 5月 2日 (火) 18:26:46 JST


宮城です。

S2Container.NET 1.1.1で
diconファイルのpropertyタグに,(コンマ)を2個以上含む文字列を指定すると
下記の例外が発生します。

例:,(コンマ)を2個以上含む文字列を含むpropertyタグ
<component class="Seasar.Extension.ADO.Impl.BasicSelectHandler">
  <property name="Sql">"SELECT e.empno, e.ename, e.deptno, d.dname 
  FROM emp e, dept d WHERE e.empno = @empno AND e.deptno = d.deptno"</property>
</component>

例外:
> 'System.IO.FileLoadException' の初回例外が mscorlib.dll で発生しました。
> 指定されたアセンブリ名またはコードベースは無効です。 (HRESULT からの例外: 0x80131047)

例外の発生箇所は、
Seasar.Framework.Container.Impl.ArgDefImpl.Valueプロパティで
列挙体の判定の為にClassUtil.ForName()経由で
Type.GetType()を呼び出している箇所です。

原因は、,(コンマ)がType.GetType(string typeName)の
区切り記号として使用されているためです。
(参考URL : http://msdn2.microsoft.com/ja-jp/library/c5cf8k43.aspx)


この例外に対する修正方法を、下記のように考えています。
(1) ,(コンマ)を1個以上含む文字列の場合、常に文字列とみなす。
    メリット:修正が楽。
    デメリット:場当たり的な修正。完全限定型名の列挙体は指定できない。
(2) 列挙体名の前に'@'を付けて指定するようにする。
    <property name="Foo">@System.Drawing.Color.Red</property>
    メリット:文字列と列挙体名を明確に区別可能。
    デメリット:S2Container.JavaのOGNL相応の機能を実装する必要がある。

とりあえず、(1)の方法で修正したいと考えています。
(2)については、
・列挙体だけの問題ではなくタグ指定全般に関わってくる問題のため検討要。
・OGNL相応の機能を実装する時間がない。
・OGNL相応のライブラリがあるかも。
・私の力不足のため(汗
の理由で保留です。

他に良いアイデアがあればご教授いただきたければと思います。


--------------------------------------
Yahoo! JAPAN 10th Anniversary Special Feature
--- Enjoy Yahoo! Auction with Yahoo! Mail !! ---
http://pr.mail.yahoo.co.jp/auction/


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