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?
