[Seasar-user:20724] getComponent() で BeanWrapper が返ってくる (Re: HotDeployモードでIllegalArgumentException)
白井 薫
[E-MAIL ADDRESS DELETED]
2011年 4月 15日 (金) 14:56:12 JST
白井といいます。
いつもSeasarプロダクトの開発とサポートを続けて下さって
いる皆様に
感謝をいたします。 m(__)m
さて、 SAStruts + S2Container (環境は末記記載)を
利用して
Web開発をしている中での質問なのですが、
過去に投稿のあった、こちらと同じ問題に出くわしました:
[Seasar-user:16715] 【S2Struts】 HotDeployモードで
IllegalArgumentExceptionが発生しています。
http://ml.seasar.org/archives/seasar-user/2009-January/016716.html
調べてみたところ、
@Component(instance = InstanceType.REQUEST)
class ComponentA implements Serializable {
@Resource
ComponentB componentB
}
@Component(instance = InstanceType.REQUEST)
class ComponentB implements Serializable {
}
このような2つの、同じタイプのコンポーネントがある状況で
(これらはcreatorによって自動登録されています)
ComponentA.componentB に
ComponentB が自動バインディングされる際、
componentB フィールドに値をセットする Field.set メソッ
ドにおいて、
値がフィールド型と互換性がないという
IllegalArgumentException が発生します。
====
さらに調べてみると、
自動バインディングされるべき componentB を取得している
このような部分で、
componentDef.getContainer().getComponent("componentB")
BeanWrapper (bean = componentB) クラスのオブジェクトが返って
きます。
一方で、
getComponent("componentA") はそのまま ComponentA クラス
のオブジェクトが
返ってきます。
この BeanWrapper が返ってきているというのが
おそらくこの IllegalArgumentException エラーの原因であ
ろうと思うのですが、
getComponent()がBeanWrapperを返してくる
というのはどのような原因が考えられますでしょうか?
【環境】
s2-frameworkのバージョンは2.4.43です。
s2-extensionのバージョンは2.4.43です。
s2-tigerのバージョンは2.4.43です。
sastruts 1.0.4sp7
Hot Deploy
よろしくお願いいたします。
--
白井 薫
Seasar-user メーリングリストの案内