Hi list,
I'm trying to help on OSGifying the JAX-RS reference implementation Jersey.
Based on work done by Richard Wallace there was a branch opened (see [1]). I
tried to replay what is done by the unit tests provided in the
osgi/servicemix/tests project by manual means, i.e. installing the individual
jersey bundles and its dependencies manually into Equinox/Felix and writing a
simple bundle that tries to deploy a Jersey servlet using the Grizzly servlet
container (which is something that is done in the test using Pax Exam).
My bundle activator implementation does not much more than this:
// ...
GrizzlyWebServer gws = new GrizzlyWebServer(8080);
ServletAdapter jerseyAdapter = new ServletAdapter();
jerseyAdapter.addInitParameter("com.sun.jersey.config.property.classnames",
"com.sun.jersey.osgi.tests.SimpleResource");
jerseyAdapter.addInitParameter("com.sun.jersey.config.property.resourceConfigClass",
"com.sun.jersey.api.core.ClassNamesResourceConfig");
jerseyAdapter.setContextPath("/jersey");
jerseyAdapter.setServletInstance(new ServletContainer());
gws.addGrizzlyAdapter(jerseyAdapter, new String[] { "/jersey" });
gws.start();
// ...
which starts up fine. All bundles are resolved and can be started:
[ 66] [Active ] jsr311-api - servicemix bundle (1.1.5.ea-SNAPSHOT)
[ 67] [Active ] jersey core - servicemix bundle (1.1.5.ea-SNAPSHOT)
[ 68] [Active ] jersey server - servicemix bundle (1.1.5.ea-SNAPSHOT)
[ 69] [Active ] jersey client - servicemix bundle (1.1.5.ea-SNAPSHOT)
[ 70] [Active ] jersey json - servicemix bundle (1.1.5.ea-SNAPSHOT)
[ 71] [Active ] jettison (1.1)
[ 72] [Active ] Jackson JSON processor (1.1.1)
[ 73] [Resolved ] grizzly-servlet-webserver (1.9.8)
[ 74] [Active ] ASM all classes (3.1)
[ 75] [Active ] JerseyTest (0.0.1)
[ 76] [Active ] Servlet API Bundle (2.5.0.v200806031605)
Now, if I browse to http://localhost:8080/jersey the following exception is
thrown:
javax.servlet.ServletException: Resource configuration class,
com.sun.jersey.api.core.ClassNamesResourceConfig, could not be loaded
at
com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:688)
at
com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:620)
at
com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:200)
at
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:307)
at
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:470)
at javax.servlet.GenericServlet.init(GenericServlet.java:241)
at
com.sun.grizzly.http.servlet.ServletAdapter.loadServlet(ServletAdapter.java:327)
at
com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:268)
at
com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:165)
at
com.sun.grizzly.tcp.http11.GrizzlyAdapterChain.service(GrizzlyAdapterChain.java:185)
at
com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:165)
at
com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:659)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:577)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:829)
at
com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:162)
at
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:136)
at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:103)
at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:89)
at
com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:67)
at
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.ClassNotFoundException:
com.sun.jersey.api.core.ClassNamesResourceConfig
at
org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:726)
at org.apache.felix.framework.ModuleImpl.access$100(ModuleImpl.java:60)
at
org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1631)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at
com.sun.jersey.core.reflection.ReflectionHelper.classForNameWithException(ReflectionHelper.java:220)
at
com.sun.jersey.core.reflection.ReflectionHelper.classForNameWithException(ReflectionHelper.java:200)
at
com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:653)
... 25 more
What is really weird about that, is that com.sun.jersey.api.core is exported by
the server bundle and obviously other classes from that bundle and package were
loaded successfully, too. Using the tracing-feature of Equinox I checked the
loader output and it confirms that other classes from the same bundle and
package were loaded. The same behaviour arises with Felix.
Does somebody have a clue how this is possible? And what could be the solution
to it?
Kind regards,
Daniel Bimschas
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev