users@jersey.java.net

Upgrade problem with Tomcat & OSGi & Jersey

From: markj <mark_at_redpt.com>
Date: Tue, 21 Sep 2010 16:06:30 -0700 (PDT)

Hi,

We've had a REST application in Tomcat using OSGi and Jersey 1.1.5.1. In
order to get this to work, we included the Jersey and dependent jars in the
bundle and changed the class loader during the servlet initialization.
Here's a piece of the code from our implementation of
ServiceTrackerCustomizer:

Thread currentThread = Thread.currentThread();
ClassLoader cl = currentThread.getContextClassLoader();
Thread.currentThread().setContextClassLoader(HttpServiceTracker.class.getClassLoader());
                        
HttpContext httpContext = service.createDefaultHttpContext();
Hashtable params = new Hashtable();
params.put("javax.ws.rs.Application",
"com.servicemesh.agility.internal.api.v1_0.AgilityApplication");
service.registerServlet("/api/v1.0", new ServletWrapper(new
com.sun.jersey.spi.container.servlet.ServletContainer()), params,
httpContext);

params = new Hashtable();
params.put("javax.ws.rs.Application",
"com.servicemesh.agility.internal.api.RootApplication");
service.registerServlet("/api", new ServletWrapper(new
com.sun.jersey.spi.container.servlet.ServletContainer()), params,
httpContext);
currentThread.setContextClassLoader(cl);

The ServletWrapper wrapped all the calls with the similar changes to the
class loader (and restoring it).

We have now upgraded to Jersey 1.4 and all associated dependencies and
cannot get the bundle to initialize. I've also tried converting our
Activator to the same case as the Jersey OSGi example. In all cases, we get
this stack trace (from Eclipse):

Sep 21, 2010 5:46:21 PM
com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.4 09/11/2010 10:30
PM'
Sep 21, 2010 5:46:21 PM
com.sun.jersey.server.impl.application.DeferredResourceConfig$ApplicationHolder
<init>
INFO: Instantiated the Application class
com.servicemesh.agility.internal.api.v1_0.AgilityApplication
Sep 21, 2010 5:51:17 PM com.sun.jersey.core.spi.component.ProviderFactory
__getComponentProvider
SEVERE: The provider class, class
com.sun.jersey.server.impl.model.parameter.multivalued.JAXBStringReaderProviders$RootElementProvider,
could not be instantiated. Processing will continue but the class will not
be utilized
java.lang.IllegalArgumentException: argument type mismatch
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at
com.sun.jersey.core.spi.component.ComponentConstructor._getInstance(ComponentConstructor.java:198)
        at
com.sun.jersey.core.spi.component.ComponentConstructor.getInstance(ComponentConstructor.java:169)
        at
com.sun.jersey.core.spi.component.ProviderFactory.__getComponentProvider(ProviderFactory.java:166)
        at
com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:137)
        at
com.sun.jersey.core.spi.component.ProviderServices.getComponent(ProviderServices.java:256)
        at
com.sun.jersey.core.spi.component.ProviderServices.getProvidersAndServices(ProviderServices.java:173)
        at
com.sun.jersey.server.impl.model.parameter.multivalued.StringReaderFactory.init(StringReaderFactory.java:60)
        at
com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1166)
        at
com.sun.jersey.server.impl.application.WebApplicationImpl.access$600(WebApplicationImpl.java:161)
        at
com.sun.jersey.server.impl.application.WebApplicationImpl$12.f(WebApplicationImpl.java:698)
        at
com.sun.jersey.server.impl.application.WebApplicationImpl$12.f(WebApplicationImpl.java:695)
        at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:197)
        at
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:695)
        at
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:690)
        at
com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:438)
        at
com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:287)
        at
com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:587)
        at
com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:213)
        at
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:342)
        at
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:516)
        at javax.servlet.GenericServlet.init(GenericServlet.java:212)
        at
com.servicemesh.agility.internal.api.ServletWrapper.init(ServletWrapper.java:66)
        at
org.apache.felix.http.base.internal.handler.ServletHandler.init(ServletHandler.java:55)
        at
org.apache.felix.http.base.internal.handler.HandlerRegistry.addServlet(HandlerRegistry.java:65)
        at
org.apache.felix.http.base.internal.service.HttpServiceImpl.registerServlet(HttpServiceImpl.java:97)
        at
com.servicemesh.agility.internal.api.HttpServiceTracker.addingService(HttpServiceTracker.java:43)
        at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
        at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
        at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:233)
        at
org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:840)
        at
org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:864)
        at
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:732)
        at
org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:662)
        at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3619)
        at org.apache.felix.framework.Felix.access$000(Felix.java:39)
        at org.apache.felix.framework.Felix$2.serviceChanged(Felix.java:667)
        at
org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry.java:97)
        at org.apache.felix.framework.Felix.registerService(Felix.java:2760)
        at
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:252)
        at
org.apache.felix.http.base.internal.HttpServiceController.register(HttpServiceController.java:64)
        at
org.apache.felix.http.base.internal.DispatcherServlet.init(DispatcherServlet.java:41)
        at osgi.bridge.DispatcherTracker.initDispatcher(DispatcherTracker.java:79)
        at osgi.bridge.DispatcherTracker.setDispatcher(DispatcherTracker.java:60)
        at osgi.bridge.DispatcherTracker.addingService(DispatcherTracker.java:35)
        at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
        at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
        at
org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:339)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:273)
        at osgi.bridge.ProxyServlet.doInit(ProxyServlet.java:32)
        at osgi.bridge.ProxyServlet.init(ProxyServlet.java:21)
        at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
        at
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3996)
        at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4266)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
        at org.apache.catalina.core.StandardService.start(StandardService.java:448)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
        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 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Sep 21, 2010 5:51:23 PM com.sun.jersey.spi.inject.Errors
processErrorMessages
SEVERE: The following errors and warnings have been detected with resource
and/or provider classes:
  SEVERE: Missing dependency for constructor public
com.sun.jersey.server.impl.model.parameter.multivalued.JAXBStringReaderProviders$RootElementProvider(com.sun.jersey.spi.inject.Injectable,javax.ws.rs.ext.Providers)
at parameter index 0
17:51:23,193 ERROR ServiceTrackerCustomizer:52 - HttpServerTracker:
exception: class com.sun.jersey.spi.inject.Errors$ErrorMessagesException
17:51:23,197 ERROR ServiceTrackerCustomizer:53 -
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
        at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
        at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:137)
        at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:203)
        at
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:695)
        at
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:690)
        at
com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:438)
        at
com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:287)
        at
com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:587)
        at
com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:213)
        at
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:342)
        at
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:516)
        at javax.servlet.GenericServlet.init(GenericServlet.java:212)
        at
com.servicemesh.agility.internal.api.ServletWrapper.init(ServletWrapper.java:66)
        at
org.apache.felix.http.base.internal.handler.ServletHandler.init(ServletHandler.java:55)
        at
org.apache.felix.http.base.internal.handler.HandlerRegistry.addServlet(HandlerRegistry.java:65)
        at
org.apache.felix.http.base.internal.service.HttpServiceImpl.registerServlet(HttpServiceImpl.java:97)
        at
com.servicemesh.agility.internal.api.HttpServiceTracker.addingService(HttpServiceTracker.java:43)
        at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
        at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
        at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:233)
        at
org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:840)
        at
org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:864)
        at
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:732)
        at
org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:662)
        at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3619)
        at org.apache.felix.framework.Felix.access$000(Felix.java:39)
        at org.apache.felix.framework.Felix$2.serviceChanged(Felix.java:667)
        at
org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry.java:97)
        at org.apache.felix.framework.Felix.registerService(Felix.java:2760)
        at
org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:252)
        at
org.apache.felix.http.base.internal.HttpServiceController.register(HttpServiceController.java:64)
        at
org.apache.felix.http.base.internal.DispatcherServlet.init(DispatcherServlet.java:41)
        at osgi.bridge.DispatcherTracker.initDispatcher(DispatcherTracker.java:79)
        at osgi.bridge.DispatcherTracker.setDispatcher(DispatcherTracker.java:60)
        at osgi.bridge.DispatcherTracker.addingService(DispatcherTracker.java:35)
        at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
        at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
        at
org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:339)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:273)
        at osgi.bridge.ProxyServlet.doInit(ProxyServlet.java:32)
        at osgi.bridge.ProxyServlet.init(ProxyServlet.java:21)
        at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
        at
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3996)
        at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4266)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
        at org.apache.catalina.core.StandardService.start(StandardService.java:448)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
        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 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)

The class referenced that cannot be instantiated or has the wrong
initialization parameter appears in a jar file in the bundle. We have also
downloaded the code and can't see where this is coming from.

As I mentioned, this worked with Jersey 1.1.5.1. Are there other changes
required or am I missing something?

Thanks in advance,
Mark



-- 
View this message in context: http://jersey.576304.n2.nabble.com/Upgrade-problem-with-Tomcat-OSGi-Jersey-tp5556991p5556991.html
Sent from the Jersey mailing list archive at Nabble.com.