|
From: Colin S. <col...@ex...> - 2004-01-28 13:19:01
|
Rod,
Have you ever seen cglib's EnhancerEmitter blow up on trying to create a
proxy? I generally only have to proxy interfaces, so have not proxied
classes too much so far, however I just had a case where I needed to
proxy a class directly, and got the following exception:
method 'onMessage' due to throwable
[org.springframework.beans.factory.BeanCrea
tionException: Error creating bean with name 'packaging-engine' defined
in class
path resource [packaging-applicationContext.xml]: Initialization method
of bean
failed; nested exception is:
org.springframework.aop.framework.AopConfigException: Unexpected
AOP exc
eption; nested exception is:
java.lang.NullPointerException]
08:07:48,585 INFO [JtaTransactionManager] Initiating transaction rollback
08:07:48,585 ERROR [LogInterceptor] RuntimeException:
org.springframework.beans.factory.BeanCreationException: Error creating
bean wit
h name 'packaging-engine' defined in classpath resource
[packaging-applicationCo
ntext.xml]: Initialization method of bean failed; nested exception is:
org.springframework.aop.framework.AopConfigException: Unexpected
AOP exc
eption; nested exception is:
java.lang.NullPointerException
org.springframework.aop.framework.AopConfigException: Unexpected AOP
exception;
nested exception is:
java.lang.NullPointerException
java.lang.NullPointerException
at
net.sf.cglib.proxy.EnhancerEmitter$4.getMethods(EnhancerEmitter.java:
407)
at net.sf.cglib.proxy.NoOpGenerator.generate(NoOpGenerator.java:69)
at
net.sf.cglib.proxy.EnhancerEmitter.emitMethods(EnhancerEmitter.java:4
31)
at
net.sf.cglib.proxy.EnhancerEmitter.<init>(EnhancerEmitter.java:172)
This is using BeanNameAutoProxyCreator, with proxyTargetClass set to
true. I actually used another postprocessor just for this case, since
normally I only care about interfaces, so there's nothing else in it:
<bean id="packaging-txAutoProxyCreator2"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="proxyTargetClass"><value>true</value></property>
<property name="interceptorNames">
<list>
<idref bean="hibInterceptor"/>
<idref local="packaging-matchAllTxInterceptor"/>
</list>
</property>
<property name="beanNames">
<list>
<idref local="packaging-engine"/>
</list>
</property>
</bean>
The class in question (Engine) is a fairly simple class. It implements
no interfaces.
Regards,
Colin
|