If can run the program successfully without OSGi container, then the problem
is probably about class loading.

Osgi requires all imported bundles should be explicitly stated inside bundle
"MANIFEST.MF"

For non-OSGI compatible libraries, it is a problem

if run the program inside Apache karaf, you can solve the classloading
problem by using "dev:dynamic-import" command inside Karaf shell.

or 
add the following declaration inside the "MANIFEST.MF"

DynamicImport-Package: *

Best Rgds,

Tom


 

-----Original Message-----
From: Roger Stocker [mailto:[email protected]] 
Sent: Thursday, August 15, 2013 2:48 AM
To: [email protected]
Subject: Classloader issues with namespace handler

Hi

I wrote a namespace handler for the restlet framework.
Now I ran into a classloader issue with this in the context.xml file:

     <restlet:component id="component">
         <restlet:server protocol="http" port="8081" />

         <restlet:defaultHost>
             <restlet:attachDefault
targetClass="org.code4you.osgi.restlet.resource.DefaultResource" />
         </restlet:defaultHost>
     </restlet:component>

This is the stack trace:

java.lang.ClassNotFoundException: 
org.code4you.osgi.restlet.resource.DefaultResource
     at
org.restlet.engine.util.EngineClassLoader.findClass(EngineClassLoader.java:1
04)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
     at org.restlet.engine.Engine.loadClass(Engine.java:359)
     at
org.restlet.ext.spring.SpringRouter.setAttachment(SpringRouter.java:91)
     at org.restlet.ext.spring.SpringHost.setAttachment(SpringHost.java:121)
     at
org.restlet.ext.spring.SpringHost.setDefaultAttachment(SpringHost.java:133)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57
)
     at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:43)
     at java.lang.reflect.Method.invoke(Method.java:606)
     at
org.apache.aries.blueprint.utils.ReflectionUtils$MethodPropertyDescriptor.in
ternalSet(ReflectionUtils.java:628)
     at
org.apache.aries.blueprint.utils.ReflectionUtils$PropertyDescriptor.set(Refl
ectionUtils.java:378)
     at
org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:
939)
     at
org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.jav
a:907)
     at
org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.jav
a:888)
     at
org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.j
ava:820)
     at
org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.ja
va:787)
     at
org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
     at java.util.concurrent.FutureTask.run(FutureTask.java:166)
     at
org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)
     at
org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:
933)
     at
org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.jav
a:907)
     at
org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.jav
a:888)
     at
org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.j
ava:820)
     at
org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.ja
va:787)
     at
org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
     at java.util.concurrent.FutureTask.run(FutureTask.java:166)
     at
org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)
     at
org.apache.aries.blueprint.container.BlueprintRepository.createInstances(Blu
eprintRepository.java:245)
     at
org.apache.aries.blueprint.container.BlueprintRepository.createAll(Blueprint
Repository.java:183)
     at
org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEager
Components(BlueprintContainerImpl.java:668)
     at
org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintC
ontainerImpl.java:370)
     at
org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintCon
tainerImpl.java:261)
     at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
     at java.util.concurrent.FutureTask.run(FutureTask.java:166)
     at
org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServ
iceWrapper.java:106)
     at
org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(Disc
ardableRunnable.java:48)
     at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
     at java.util.concurrent.FutureTask.run(FutureTask.java:166)
     at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$
201(ScheduledThreadPoolExecutor.java:178)
     at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Sch
eduledThreadPoolExecutor.java:292)
     at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11
45)
     at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6
15)
     at java.lang.Thread.run(Thread.java:724)

The class DefaultResource is in the same bundle where the restlet component
is defined in the context.
I tried the same with the spring-blueprint-extender, and it worked there.

Any ideas?

Reply via email to