cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rice Yeh" <rice...@gmail.com>
Subject Re: ClassCastException becuase of different classloaders for a bean weaving by springframework
Date Wed, 27 Sep 2006 09:55:07 GMT
I think it is the bug
http://issues.apache.org/jira/browse/COCOON-1921causing this problem.

Rice

On 9/22/06, Simone Gianni <s.gianni@thebug.it> wrote:
>
> Hi Rice,
> yep, I noticed that too, jetty6:run builds the classpath reading from
> the pom.xml, but actually this should not be "important", because this
> classpath is then reloaded by the cocoon classloader which is a
> child-first, so falls back on the jetty6:run created classpath only if
> it cannot find a class.
>
> I'm currently loading some beans with spring from different jars and not
> having this problem, as long as all classes are there. Problems arise
> when you try to use JRE classes or other shared libraries not loaded by
> the cocoon classloader.
>
> You should check the classloader of xs.school.Platform, this is because
> when you declare a method, say doSomethingWith(MyObject o) in class
> MyClass, argument and return classes are resolved on the current class
> classloader, so the method will be
> doSomethingWith(MyObject-LoadedByMyClassClassloader o), and it will
> complain if you try to invoke
> MyClass.doSomethingWith(MyObject-LoadedFromAnotherClassloader). Is
> xs.school.Platform in WEB-INF/cocoon/lib as well? Loaded by the cocoon
> classloader?
>
> How do you discovered which classloader was loading a certain class? I'm
> asking because i noticed that Eclipse is a bit buggy in these field. The
> best way I've found so far is to put a static block printing out "Class
> X loaded by XXX".
>
> Hope this helps,
> Simone
>
>
> Rice Yeh wrote:
> > Seems jetty6:run will automatically add all dependences in pom.xml to
> > WEB-INF/lib. I get the following information by passing -X to mvn
> command.
> >
> > [INFO] Context path = /
> > [DEBUG] Adding artifact hibernate-3.2.0.cr2.jar for WEB-INF/lib
> > [DEBUG] Adding artifact jakarta-bcel-20040329.jar for WEB-INF/lib
> > [DEBUG] Adding artifact excalibur-logger-2.1.jar for WEB-INF/lib
> > [DEBUG] Adding artifact commons-logging-1.0.4.jar for WEB-INF/lib
> > [DEBUG] Adding artifact xs-persistence-hibernate-1.0-SNAPSHOT.jar for
> > WEB-INF/lib
> > ....
> >
> > On 9/20/06, *Rice Yeh* < riceyeh@gmail.com <mailto:riceyeh@gmail.com>>
> > wrote:
> >
> >     Hi,
> >       I have a bean created thru. springframeowrk in cocoon. The bean
> >     needs 3 arguments in its contructor to create it as below:
> >
> >         <bean id="platform" class="xs.school.Platform"
> scope="singleton">
> >             <constructor-arg type="java.lang.String"
> value="development"/>
> >             <constructor-arg type="xs.persistence.Adapter"
> >     ref="persistenceAdapter"/>
> >             <constructor-arg type=" java.util.Locale"><util:constant
> >     static-field="java.util.Locale.TAIWAN"/></constructor-arg>
> >         </bean>
> >
> >         <bean id="persistenceAdapter"
> >     class="xs.selection.HibernateAdapter ">
> >             <property name="settings" value="hibernate.cfg.xml"/>
> >         </bean>
> >
> >     I find xs.persistence.Adapter 's (which is an interface)
> >     classloader is WebAppClassLoader. The real adapter implemenation
> >     is called HibernateAdapter whose classloader is
> >     DefaultClassLoader. So a ClassCastException is thrown when
> >     assigning the instance of HibernateAdapter (which implements
> >     Adapter, surely) to the second argument shown beflow. Adapter and
> >     HibernateAdapter are in two different jars but both are in
> >     WEB-INF/cocoon/lib. Should not all classes in jars under
> >     WEB-INF/cocoon/lib loaded by the same classloader
> >     (DefaultClassLoader)?
> >
> >     Caused by:
> >     org.springframework.beans.factory.UnsatisfiedDependencyException:
> Err
> >     or creating bean with name 'platform' defined in URL
> >     [file:C:/tmp/cocoon/xs-scho
> >     ol-cocoon/src/main/resources/META-INF/spring/application.xml]:
> >     Unsatisfied depen
> >     dency expressed through constructor argument with index 1 of type
> >     [xs.persistenc
> >     e.Adapter]: Could not convert constructor argument value
> >     [xs.selection.Hibernate
> >     Adapter@779f5e] to required type [xs.persistence.Adapter ]: Failed
> >     to convert val
> >     ue of type [xs.selection.HibernateAdapter] to required type
> >     [xs.persistence.Adap
> >     ter]; nested exception is java.lang.IllegalArgumentException: No
> >     matching editor
> >     s or conversion strategy found
> >             at
> >
> org.springframework.beans.factory.support.ConstructorResolver.createA
> >     rgumentArray(ConstructorResolver.java:375)
> >             at
> >
> org.springframework.beans.factory.support.ConstructorResolver.autowir
> >     eConstructor( ConstructorResolver.java:126)
> >             at
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBean
> >     Factory.autowireConstructor(AbstractAutowireCapableBeanFactory.java
> :548)
> >             at
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBean
> >     Factory.createBean(AbstractAutowireCapableBeanFactory.java:352)
> >             at
> >
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb
> >     ject(AbstractBeanFactory.java:240)
> >             at
> >
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistr
> >     y.getSingleton(DefaultSingletonBeanRegistry.java:132)
> >             at
> >
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
> >     (AbstractBeanFactory.java:237)
> >             at
> >
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
> >     (AbstractBeanFactory.java:153)
> >             at
> >     org.springframework.beans.factory.support.DefaultListableBeanFactory
> .
> >     preInstantiateSingletons(DefaultListableBeanFactory.java:254)
> >             at
> >
> org.springframework.context.support.AbstractApplicationContext.refres
> >     h(AbstractApplicationContext.java:337)
> >             at
> >
> org.springframework.web.context.support.AbstractRefreshableWebApplica
> >     tionContext.refresh(AbstractRefreshableWebApplicationContext.java
> :156)
> >             at
> >
> org.springframework.web.context.ContextLoader.createWebApplicationCon
> >     text(ContextLoader.java:246)
> >             at
> >
> org.springframework.web.context.ContextLoader.initWebApplicationConte
> >     xt(ContextLoader.java:184)
> >             at
> >
> org.springframework.web.context.ContextLoaderListener.contextInitiali
> >     zed(ContextLoaderListener.java:49)
> >             at
> >     org.apache.cocoon.bootstrap.servlet.ShieldingListener.invoke
> (Shieldin
> >     gListener.java:151)
> >             ... 32 more
> >
> >
> >     Rice
> >
> >
>

Mime
View raw message