[Seasar-user:3293] Genericなメソッドへのアスペクトの適用
Kaisei HAMAMOTO
hamamoto
2006年 2月 28日 (火) 17:03:38 JST
浜本です。お世話になっております。
S2AOPで、Genericな戻り値を持つメソッドにアスペクトを適用するとエラーが発生します。
使用しているのは Seasar 2.3.4 と Javassist 3.1 です。
この現象への対処方法はありますでしょうか。
よろしくお願いいたします。
[再現例]
以下のようにファイルを用意し、test.Testを実行すると例外が発生します。
---- test/DummyStringList.java ----
package test;
import java.util.AbstractList;
public class DummyStringList extends AbstractList<String> {
public String get(int index) { return null; }
public int size() { return 0; }
}
---- test/test.dicon ----
<component class="test.DummyStringList">
<aspect pointcut="get">
<component class="org.seasar.framework.aop.interceptors.TraceInterceptor"/>
</aspect>
</component>
---- test/Test.java ----
public static void main(String[] args) {
S2Container c = S2ContainerFactory.create("test/test.dicon");
c.init();
}
Exception in thread "main" org.seasar.framework.aop.javassist.CannotCompileRuntimeException:
[ESSR0017]例外が発生しました。理由はjavassist.CannotCompileException: duplicate method: get$$invokeSuperMethod$$
at org.seasar.framework.aop.javassist.AbstractGenerator.createMethod(AbstractGenerator.java:262)
at org.seasar.framework.aop.javassist.EnhancedClassGenerator.createInvokeSuperMethod(EnhancedClassGenerator.java:54)
at org.seasar.framework.aop.javassist.AspectWeaver.createInvokeSuperMethod(AspectWeaver.java:125)
at org.seasar.framework.aop.javassist.AspectWeaver.setInterceptors(AspectWeaver.java:72)
at org.seasar.framework.aop.proxy.AopProxy.setAspects(AopProxy.java:95)
at org.seasar.framework.aop.proxy.AopProxy.<init>(AopProxy.java:61)
at org.seasar.framework.container.util.AopProxyUtil.getConcreteClass(AopProxyUtil.java:41)
at org.seasar.framework.container.impl.ComponentDefImpl.getConcreteClass(ComponentDefImpl.java:139)
at org.seasar.framework.container.assembler.AutoConstructorAssembler.getSuitableConstructor(AutoConstructorAssembler.java:50)
at org.seasar.framework.container.assembler.AutoConstructorAssembler.doAssemble(AutoConstructorAssembler.java:39)
at org.seasar.framework.container.assembler.AbstractConstructorAssembler.assemble(AbstractConstructorAssembler.java:50)
at org.seasar.framework.container.deployer.SingletonComponentDeployer.assemble(SingletonComponentDeployer.java:67)
at org.seasar.framework.container.deployer.SingletonComponentDeployer.deploy(SingletonComponentDeployer.java:51)
at org.seasar.framework.container.deployer.SingletonComponentDeployer.init(SingletonComponentDeployer.java:96)
at org.seasar.framework.container.impl.ComponentDefImpl.init(ComponentDefImpl.java:272)
at org.seasar.framework.container.impl.S2ContainerImpl.init(S2ContainerImpl.java:361)
at test.Test.main(Test.java:9)
Caused by: javassist.CannotCompileException: duplicate method: get$$invokeSuperMethod$$
at javassist.bytecode.ClassFile.testExistingMethod(ClassFile.java:544)
at javassist.bytecode.ClassFile.addMethod(ClassFile.java:528)
at javassist.CtClassType.addMethod(CtClassType.java:1062)
at org.seasar.framework.aop.javassist.AbstractGenerator.createMethod(AbstractGenerator.java:257)
... 16 more
Seasar-user メーリングリストの案内