Hi Adam,

Thanks for the report. I've declared the dependency on CGLib in the Spring
library instead of the Spring extension. 

Could you try again with SVN trunk or the next snapshot?

Best regards,
Jerome Louvel
--
Restlet ~ Founder and Lead developer ~ http://www.restlet.org
Noelios Technologies ~ Co-founder ~ http://www.noelios.com


-----Message d'origine-----
De : news [mailto:[EMAIL PROTECTED] De la part de Adam Harris
Envoye : vendredi 3 octobre 2008 23:34
A : [email protected]
Objet : SpringFinder cannot see CGLib classes in OSGi

I am trying out the Spring Extensions of Restlet 1.1RC2 in OSGi,
specifically
Equinox 3.4.0, Spring 2.5.5, and Spring-DM 1.1.1.  My Spring application
context
is using the SpringFinder bean in much the same way the Restlet Spring
example 
does:

    <bean id="v1Router" class="org.restlet.ext.spring.SpringRouter">
        <property name="attachments">
            <map>
                <entry key="/jobs">
                   <bean class="org.restlet.ext.spring.SpringFinder">
                     <lookup-method name="createResource"
bean="jobsResource"/>
                   </bean>
                </entry>
            </map>
        </property>
    </bean>


When Spring tries to use CGLib for the "lookup-method" it cannot find the
CGLib
classes and gets this exception:

Caused by: org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'org.restlet.ext.spring.SpringFinder#19e215b'
defined in
URL [bundleentry://38/META-INF/spring/restlet.pde-context.xml]:
Instantiation of
bean failed; nested exception is net.sf.cglib.core.CodeGenerationException:
java.lang.reflect.InvocationTargetException-->null
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.
    instantiateBean(AbstractAutowireCapableBeanFactory.java:883)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.
    createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.
    doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
$1.
    run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.
    createBean(AbstractAutowireCapableBeanFactory.java:380)
        at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.
    resolveInnerBean(BeanDefinitionValueResolver.java:219)
        ... 32 more
Caused by: net.sf.cglib.core.CodeGenerationException:
java.lang.reflect.InvocationTargetException-->null
        at net.sf.cglib.core.AbstractClassGenerator.create(
    AbstractClassGenerator.java:237)
        at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
        at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)
        at
org.springframework.beans.factory.support.CglibSubclassingInstantiationStrat
egy
    $CglibSubclassCreator.
        instantiate(CglibSubclassingInstantiationStrategy.java:116)
        at
org.springframework.beans.factory.support.CglibSubclassingInstantiationStrat
egy
    .instantiateWithMethodInjection(
        CglibSubclassingInstantiationStrategy.java:70)
        at
org.springframework.beans.factory.support.SimpleInstantiationStrategy.
    instantiate(SimpleInstantiationStrategy.java:65)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.
    instantiateBean(AbstractAutowireCapableBeanFactory.java:877)
        ... 38 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(
    NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.
    java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384)
        at net.sf.cglib.core.AbstractClassGenerator.create(
    AbstractClassGenerator.java:219)
        ... 44 more
Caused by: java.lang.NoClassDefFoundError: net/sf/cglib/proxy/Factory
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        ... 50 more
Caused by: java.lang.ClassNotFoundException: net.sf.cglib.proxy.Factory
        at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(
    BundleLoader.java:481)
        at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(
    BundleLoader.java:397)
        at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(
    BundleLoader.java:385)
        at
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(
    DefaultClassLoader.java:87)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        ... 52 more


The only solution I've found is to modify the MANIFEST.MF in
org.restlet.ext.spring_2.5.jar and import all the of "net.sf.cglib.*"
related
packages.  Is this a bug in the Restlet's Spring Extension manifest or might
I
have something wrong in my environment?

Thanks for your help,
Adam




Reply via email to