[Seasar-user:550] Re: インターフェイスコンポーネント生成例外

Yasuo Higa higa
2005年 4月 6日 (水) 01:08:08 JST


<20040330175521.F5B8.KURIHARA @ gluegent.com> の、
   "[Seasar-user:549] インターフェイスコンポーネント生成例外" において、
   "Masataka Kurihara <kurihara @ gluegent.com>"さんは書きました:

ひがです。

> 栗原です。
> 
> インターフェイスコンポーネント生成でNoSuchConstructorException
> が出るように何時からか、なっちゃいました。
> 
> public interface ScriptUser {
>   public String eval(String name);
> }
> 
> <component class="ScriptUser">
>   <aspect>
>     <component class="ShellAdvice">
>       <property name="fileName">'script.xml'<property>
>     </component>
>   </aspect>
> </component>
> 
> みたいなので、evelをスクリプトで乗っ取る、前にS2Daoのところで
> ひがさんに教えてもらったような方法でスクリプトホストのAdvice
> つくろっかなと思ってたところ、入り口で、
> 
> org.seasar.framework.exception.NoSuchConstructorRuntimeException:
> [ESSR0064]クラス(sample.org.seasar.ScriptUser)のコンストラクタ(ScriptUserr())が
> 見つかりません
> at org.seasar.framework.util.ClassUtil.getConstructor(ClassUtil.java:96)
> 
> となります。インターフェイスをAdviceで実装できるのはステキだと
> 思うので復活のほう要望します。
> 
ほんとだ。すみません。m(_ _)m
AbstractConstructorAssemblerを
protected Object assembleDefault() {
  if (getComponentDef().getAspectDefSize() > 0) {
    AopProxy aopProxy = createAopProxy();
    return aopProxy.create();
  } else {
    Class clazz = getComponentDef().getComponentClass();
    Constructor constructor = ClassUtil.getConstructor(clazz, null);
    return ConstructorUtil.newInstance(constructor, null);
  }
}
のように書き換えれば直ります。
---
Yasuo Higa <higa @ isid.co.jp>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.



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