[Seasar-user:18829] Re: [DBFlute] DBFlute-0.9.5.5+S2DxoでIllegalArgumentException

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 11月 1日 (日) 05:30:52 JST


小林 (koichik) です.

Date:    Sun, 1 Nov 2009 05:04:05 +0900
From:    "m.m" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:18828] Re: [DBFlute] DBFlute-0.9.5.5+S2DxoでIllegalArgumentException

> Entity→DTOのS2Dxoの変換はコピー元、コピー先プロパティはともにEnum型となっております。

ということは,本来は型変換自体が不要なケースでしょうか?

> toStringのオーバーライドが問題となっているのは標準のEnumConverter内の話で変換先オブジェクトの取得が下記のようになっているためと思われます。
> 
> org.seasar.extension.dxo.converter.impl.EnumConverter.class
> public Object convert(Object source, Class destClass,
> ConversionContext context) より
> 45: final String name = source.toString();   // ここでEnum#name以外がかえってきてしまうと
> 46: return Enum.valueOf(destClass,name); //
> ここで対象がみつからなくなりIllegalArgumentException

ここは前述のように String 等から Enum 型への変換を
意図したコードなので,ここに Enum が来ること自体
想定してないと思われます.

Seasar2.4.18 で変換元と変換先が同じ型でも新しい
インスタンスを設定するように修正した際に,
EnumCnverter に対応が必要なことを見落としたようです.

こちらの設定をすると,変換元と変換先が同じ型の場合に
変換元のインスタンスがそのまま変換先に設定されるように
なります (EnumConverter を通らなくなる).

http://s2container.seasar.org/2.4/ja/s2dxo.html#shallowCopy


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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