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

kubo [E-MAIL ADDRESS DELETED]
2009年 10月 31日 (土) 22:42:59 JST


久保(jflute)です。

とりあえず、DBFluteでCDefのtoString()の戻り値を
name()にするオプションを追加しました。
littleAdjustmentMap.dfpropに
「isCDefToStringReturnsName = true」
を追加して再自動生成して下さい。

DBFlute-0.9.6-RC2でお試し下さい。
http://dbflute.sandbox.seasar.org/contents/migration/basic.html

dbflute-tricky-exampleにてこちらで確認もしています。
(Enum.valueOf()のテストケースも実装しました)
toString()の戻り値を変えても、基本動作は特に問題ないはずです。
ざっと確認してみましたが、DBFlute内部でtoString()に依存してる
ところはなさそうです(しっかりcode()とname()を明示的に利用)。
dbflute-basic-exampleで試しても該当箇所の専用のテスト以外は
全てテストケースが正常に通りました。
もちろん、アプリ側でも動作確認は必ず行って下さい。


2009/10/31 kubo <[E-MAIL ADDRESS DELETED]>:
> 久保(jflute)です。
>
> m.mさん、こんばんは
>
> 確かにEnumConverterの処理で、
> Enum.valueOf()の第二引数に、Enumのname()ではなくtoString()を
> 設定しているところがあって、そこと相性が悪いようですね。
>
> DBFlute側でtoString()を抑制するオプションを検討しようかと思いますが、
> (Dxoを使ったことないのでわからないのですが)アプリケーションで
> EnumConverterを拡張することは可能でしょうか?
> (source.toString();をsource.name();に)
>
> 2009/10/31 gonbe nanashi <[E-MAIL ADDRESS DELETED]>:
>> はじめまして。
>> m.mと申します。
>>
>> DBFlute-0.9.5からDBFlute-0.9.5.5へアップグレードしたところ、S2Dxo(S2Tiger2.4.38)を利用したEntity→DTOの変換の際に区分値で利用されているEnum型のプロパティを変換する箇所でIllegalArgumentExceptionが発生します。
>> どうもS2Dxo内のEnum処理の際toString()でEnumのname()が返されること前提の処理があるため、DBFlute-0.9.5.5から区分値定義のCDef.java内toString()でcode()を返すようOverrideされるようになったため処理がうまくいっていないようです。
>>
>> ○ログ(一部抜粋)
>> java.lang.IllegalArgumentException: No enum const class
>> xx.xx.allcommon.CDef$State.1
>>        at java.lang.Enum.valueOf(Enum.java:196)
>>        at org.seasar.extension.dxo.converter.impl.EnumConverter.convert(EnumConverter.java:46)
>>        at org.seasar.extension.dxo.converter.impl.BeanConverter.setValue(BeanConverter.java:178)
>>        at org.seasar.extension.dxo.converter.impl.BeanConverter.setValues(BeanConverter.java:113)
>>        at org.seasar.extension.dxo.converter.impl.BeanConverter.convert(BeanConverter.java:87)
>>        at org.seasar.extension.dxo.command.impl.BeanToBeanDxoCommand.convertScalar(BeanToBeanDxoCommand.java:70)
>>        at org.seasar.extension.dxo.command.impl.AbstractDxoCommand$ScalarConversionHelper.convert(AbstractDxoCommand.java:223)
>>        at org.seasar.extension.dxo.command.impl.AbstractDxoCommand.execute(AbstractDxoCommand.java:78)
>>        at org.seasar.extension.dxo.DxoInterceptor.invoke(DxoInterceptor.java:57)
>>        ...
>>
>> DBFluteのコード生成テンプレートのCDef.vmのtoString...の部分をコメントアウトすることで正常に動作することは確認できたのですが、今後のUPGやDBFlute内部でのtoStringの利用等を想定するとVMファイルの編集などDBFluteに直接手を加えるのはできるだけ避けたいです。
>>
>> こちら何かよい解決方法はあるのでしょうか?
>>
>> よろしくお願い致します。
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>


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