users@jersey.java.net

Re: [Jersey] Jersey provider-detection fails under Tomcat?

From: Gili <cowwoc_at_bbs.darktech.org>
Date: Wed, 7 Jan 2009 05:39:43 -0800 (PST)

        Is is possible to generate the list of providers at startup but only
actually load the classes at first use? This way the JAXB provider would
never load if I never use it. I assume we're trying to work around
NoClassDefFoundError here...

Gili

Paul Sandoz (via Nabble) wrote:
>
> On Jan 6, 2009, at 7:01 PM, Gili wrote:
>
> >
> > Paul,
> >
> > Can you clarify what would happen if all classes (including
> > infrastructure
> > ones) were to be marked using @Provider.
>
> It would mean that infrastructure provides may get registered by the
> user configuration when scanning e.g. file-based scanning as you
> found. They are not intended to be registered by the end-user.
>
>
> > You've said in the past this would
> > break something but I don't understand what.
> >
>
> I recall saying that i would have to do some workarounds so that such
> providers are not registered by the user configuration when scanning.
> What i want to avoid is having to hard code package names to ignore or
> doing some other workaround. I could annotate with another annotation
> which states that it is to be ignored on scanning. But this all seems
> unnecessary when there is a simpler solution of not annotating.
>
> In what i proposed in my previous email was that infrastructure
> providers should not cause the application to fail if the
> infrastructure provider class cannot be initialized. For user-
> registered providers i am proposing the opposite. For example, perhaps
> in your application you are not using JAXB (i dunno if you are or not,
> but lets assume so for the sake of argument you are not and are using
> Java 5) if the JAXB providers were annotated with @Provider your
> application would fail because the JAXB providers cannot not be
> instantiated and you would have to add JAXB jars to your class path
> even though you do not require JAXB.
>
> Paul.
>
>
> > Thanks,
> > Gili
> >
> >
> > Paul Sandoz wrote:
> >>
> >>
> >> On Jan 6, 2009, at 6:03 PM, Gili wrote:
> >>
> >>>
> >>> I used a debugger to walk through the code and as far as I can
> >>> tell if
> >>> @Provider is missing then the Guice getComponentProvider() is never
> >>> invoked
> >>> in the first place (this is in Jersey revision 1816).
> >>
> >> Thanks for doing that, it now confirms what i expected.
> >>
> >>
> >>> Sounds like a second
> >>> bug in Jersey no?
> >>>
> >>
> >> Yes. I think the manner of a fix depends on where we choose to fail
> >> on
> >> class initialization. My preference would be that we fix the
> >> annotation class scanner to fail on class loading causing an error
> >> for
> >> the config initialization resulting in application failure i.e. that
> >> is the earliest point it can fail for such initialization cases. (In
> >> general initialization of classes should fail on class loading for
> >> all
> >> cases.)
> >>
> >> I am still pondering what to do about the infrastructure providers.
> >> Having looked at it more, i really want to avoid annotating them with
> >> @Provider so they *do not* get picked up by user-defined
> >> configuration, and we still need to support the "keep on trucking"
> >> approach to the infrastructure providers. So i now think we need to
> >> treat @Provider providers registered by the user different to those
> >> registered by META-INF/service and supplied by Jersey. So i would
> >> like
> >> to revert back the multipart readers/writers to not be annotated with
> >> @Provider.
> >>
> >> In summary:
> >>
> >> 1) the user-registered configuration class loading will perform
> >> class initialization and if initialization fails the application will
> >> fail early
> >> before instantiation is attempted;
> >>
> >> 2) we can improve the reporting of infrastructure providers that
> >> fail to load (a concise warning that also alleviates concerns for
> >> those
> >> who do not have an issue and linking to the dependencies
> >> document seems appropriate); and
> >>
> >> 3) The ResourceConfig implementations should ignore any classes not
> >> annotated with @Provider or @Path. I still need to think
> >> how to do this without breaking compatibility. I am not sure
> >> it is possible.
> >>
> >> Paul.
> >>
> >>
> >>> Gili
> >>>
> >>>
> >>> Paul Sandoz wrote:
> >>>>
> >>>> After some further investigation I realized that my evaluation is
> >>>> wrong. Only when instantiating does a NoClassDefFoundError
> >>>> regardless
> >>>> of the difference in class loading (which is in the process of
> >>>> being
> >>>> fixed).
> >>>>
> >>>> I notice that your GuiceComponentProviderFactory is instantiating
> >>>> the
> >>>> provider class. The registered IoC component provider factory
> >>>> will be
> >>>> asked to instantiate components registered in both cases (@Provider
> >>>> and META-INF/services) and if the provider factory returns null
> >>>> Jersey
> >>>> instantiates. For some reasons your provider factory is
> >>>> instantiating
> >>>> for the case of a class annotated with @Provider but not otherwise,
> >>>> does your code have some logic to check annotations on the
> >>>> classes it
> >>>> instantiates?
> >>>>
> >>>> Paul.
> >>>>
> >>>> On Dec 24, 2008, at 3:10 AM, Gili wrote:
> >>>>
> >>>>>
> >>>>> Here is what I found out:
> >>>>>
> >>>>> - The MultiPart provider fails to initialize because Javamail is
> >>>>> missing.
> >>>>> Glassfish bundles this dependency, whereas Tomcat does not.
> >>>>> - If the MessageBodyReader omits @Provider then no error message
> >>>>> shows up.
> >>>>> The binding fails silently, causing Jersey to issue a confusing
> >>>>> error
> >>>>> message about the MessageBodyReader being missing when in fact
> >>>>> it is
> >>>>> not.
> >>>>> - If the MessageBodyReader is annotated using @Provider the
> >>>>> following
> >>>>> exception shows up when the webapp is initialized:
> >>>>>
> >>>>> SEVERE: Exception starting filter warpServletFilter
> >>>>> java.lang.NoClassDefFoundError: javax/mail/MessagingException
> >>>>> at java.lang.Class.getDeclaredConstructors0(Native Method)
> >>>>> at java.lang.Class.privateGetDeclaredConstructors(Class.java:
> >>>>> 2389)
> >>>>> at java.lang.Class.getDeclaredConstructors(Class.java:1836)
> >>>>> at
> >>>>> com
> >>>>> .google
> >>>>> .inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:
> >>>>> 192)
> >>>>> at
> >>>>> com
> >>>>> .google
> >>>>> .inject.ConstructorInjector.<init>(ConstructorInjector.java:
> >>>>> 45)
> >>>>> at com.google.inject.InjectorImpl$5.create(InjectorImpl.java:
> >>>>> 728)
> >>>>> at com.google.inject.InjectorImpl$5.create(InjectorImpl.java:
> >>>>> 724)
> >>>>> at
> >>>>> com.google.inject.internal.FailableCache
> >>>>> $1.create(FailableCache.java:
> >>>>> 32)
> >>>>> at
> >>>>> com
> >>>>> .google.inject.internal.ReferenceCache.create(ReferenceCache.java:
> >>>>> 54)
> >>>>> at
> >>>>> com
> >>>>> .google
> >>>>> .inject
> >>>>> .internal
> >>>>> .AbstractReferenceCache
> >>>>> .internalCreate(AbstractReferenceCache.java:
> >>>>> 59)
> >>>>> at
> >>>>> com
> >>>>> .google
> >>>>> .inject
> >>>>> .internal.AbstractReferenceCache.get(AbstractReferenceCache.java:
> >>>>> 116)
> >>>>> at
> >>>>> com.google.inject.internal.ReferenceCache.get(ReferenceCache.java:
> >>>>> 28)
> >>>>> at
> >>>>> com.google.inject.internal.FailableCache.get(FailableCache.java:
> >>>>> 43)
> >>>>> at
> >>>>> com.google.inject.InjectorImpl
> >>>>> $LateBoundConstructor.bind(InjectorImpl.java:431)
> >>>>> at
> >>>>> com
> >>>>> .google.inject.ClassBindingImpl.initialize(ClassBindingImpl.java:
> >>>>> 46)
> >>>>> at
> >>>>> com
> >>>>> .google.inject.InjectorImpl.initializeBinding(InjectorImpl.java:
> >>>>> 320)
> >>>>> at
> >>>>> com
> >>>>> .google
> >>>>> .inject.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:
> >>>>> 615)
> >>>>> at
> >>>>> com
> >>>>> .google
> >>>>> .inject
> >>>>> .InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:
> >>>>> 558)
> >>>>> at
> >>>>> com
> >>>>> .google
> >>>>> .inject.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:
> >>>>> 168)
> >>>>> at
> >>>>> com
> >>>>> .google.inject.InjectorImpl.getBindingOrThrow(InjectorImpl.java:
> >>>>> 128)
> >>>>> at
> >>>>> com.google.inject.InjectorImpl.getBinding(InjectorImpl.java:105)
> >>>>> at
> >>>>> com.google.inject.InjectorImpl.getBinding(InjectorImpl.java:60)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .spi
> >>>>> .guice
> >>>>> .container
> >>>>> .GuiceComponentProviderFactory
> >>>>> .getComponentProvider(GuiceComponentProviderFactory.java:98)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .spi
> >>>>> .guice
> >>>>> .container
> >>>>> .GuiceComponentProviderFactory
> >>>>> .getComponentProvider(GuiceComponentProviderFactory.java:87)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .core
> >>>>> .spi
> >>>>> .component
> >>>>> .ioc
> >>>>> .IoCProviderFactory._getComponentProvider(IoCProviderFactory.java:
> >>>>> 68)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .core
> >>>>> .spi
> >>>>> .component
> >>>>> .ProviderFactory.getComponentProvider(ProviderFactory.java:
> >>>>> 126)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .core
> >>>>> .spi
> >>>>> .component.ProviderServices.getComponent(ProviderServices.java:
> >>>>> 163)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .core
> >>>>> .spi
> >>>>> .component
> >>>>> .ProviderServices.getProvidersAndServices(ProviderServices.java:
> >>>>> 119)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .core
> >>>>> .spi
> >>>>> .factory
> >>>>> .MessageBodyFactory.getProviderMap(MessageBodyFactory.java:
> >>>>> 136)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .core
> >>>>> .spi
> >>>>> .factory.MessageBodyFactory.initReaders(MessageBodyFactory.java:
> >>>>> 110)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .core.spi.factory.MessageBodyFactory.init(MessageBodyFactory.java:
> >>>>> 105)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .server
> >>>>> .impl
> >>>>> .application.WebApplicationImpl.initiate(WebApplicationImpl.java:
> >>>>> 462)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .spi
> >>>>> .guice.container.servlet.GuiceServlet.initiate(GuiceServlet.java:
> >>>>> 47)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .spi
> >>>>> .container.servlet.ServletContainer.load(ServletContainer.java:
> >>>>> 540)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jersey
> >>>>> .spi
> >>>>> .container.servlet.ServletContainer.init(ServletContainer.java:
> >>>>> 207)
> >>>>> at
> >>>>> com
> >>>>> .wideplay
> >>>>> .warp.servlet.ServletDefinition.init(ServletDefinition.java:
> >>>>> 50)
> >>>>> at
> >>>>> com
> >>>>> .wideplay
> >>>>> .warp
> >>>>> .servlet.ManagedServletPipeline.init(ManagedServletPipeline.java:
> >>>>> 31)
> >>>>> at
> >>>>> com
> >>>>> .wideplay
> >>>>> .warp
> >>>>> .servlet
> >>>>> .ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:38)
> >>>>> at com.wideplay.warp.servlet.WebFilter.init(WebFilter.java:
> >>>>> 70)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina
> >>>>> .core
> >>>>> .ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:
> >>>>> 275)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina
> >>>>> .core
> >>>>> .ApplicationFilterConfig
> >>>>> .setFilterDef(ApplicationFilterConfig.java:
> >>>>> 397)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina
> >>>>> .core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:
> >>>>> 108)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina.core.StandardContext.filterStart(StandardContext.java:
> >>>>> 3709)
> >>>>> at
> >>>>> org
> >>>>> .apache.catalina.core.StandardContext.start(StandardContext.java:
> >>>>> 4363)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina.core.ContainerBase.addChildInternal(ContainerBase.java:
> >>>>> 791)
> >>>>> at
> >>>>> org
> >>>>> .apache.catalina.core.ContainerBase.addChild(ContainerBase.java:
> >>>>> 771)
> >>>>> at
> >>>>> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:
> >>>>> 525)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina.startup.HostConfig.deployDescriptor(HostConfig.java:
> >>>>> 627)
> >>>>> at
> >>>>> org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:
> >>>>> 511)
> >>>>> at
> >>>>> org.apache.catalina.startup.HostConfig.check(HostConfig.java:1231)
> >>>>> 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
> >>>>> .tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:
> >>>>> 297)
> >>>>> at
> >>>>> com
> >>>>> .sun
> >>>>> .jmx
> >>>>> .interceptor
> >>>>> .DefaultMBeanServerInterceptor
> >>>>> .invoke(DefaultMBeanServerInterceptor.java:836)
> >>>>> at
> >>>>> com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:
> >>>>> 761)
> >>>>> at
> >>>>> org
> >>>>> .apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:
> >>>>> 1471)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina.manager.ManagerServlet.deploy(ManagerServlet.java:
> >>>>> 824)
> >>>>> at
> >>>>> org
> >>>>> .apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:
> >>>>> 350)
> >>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:
> >>>>> 617)
> >>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:
> >>>>> 717)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina
> >>>>> .core
> >>>>> .ApplicationFilterChain
> >>>>> .internalDoFilter(ApplicationFilterChain.java:
> >>>>> 290)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina
> >>>>> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
> >>>>> 206)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina
> >>>>> .core.StandardWrapperValve.invoke(StandardWrapperValve.java:
> >>>>> 233)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina
> >>>>> .core.StandardContextValve.invoke(StandardContextValve.java:
> >>>>> 191)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina
> >>>>> .authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:
> >>>>> 525)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:
> >>>>> 128)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
> >>>>> 102)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina
> >>>>> .core.StandardEngineValve.invoke(StandardEngineValve.java:
> >>>>> 109)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
> >>>>> 286)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .coyote.http11.Http11Processor.process(Http11Processor.java:
> >>>>> 845)
> >>>>> at
> >>>>> org.apache.coyote.http11.Http11Protocol
> >>>>> $Http11ConnectionHandler.process(Http11Protocol.java:583)
> >>>>> at
> >>>>> org.apache.tomcat.util.net.JIoEndpoint
> >>>>> $Worker.run(JIoEndpoint.java:
> >>>>> 447)
> >>>>> at java.lang.Thread.run(Thread.java:619)
> >>>>> Caused by: java.lang.ClassNotFoundException:
> >>>>> javax.mail.MessagingException
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina
> >>>>> .loader.WebappClassLoader.loadClass(WebappClassLoader.java:
> >>>>> 1387)
> >>>>> at
> >>>>> org
> >>>>> .apache
> >>>>> .catalina
> >>>>> .loader.WebappClassLoader.loadClass(WebappClassLoader.java:
> >>>>> 1233)
> >>>>> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:
> >>>>> 320)
> >>>>> ... 75 more
> >>>>>
> >>>>> I filed two bug reports:
> >>>>> https://jersey.dev.java.net/issues/show_bug.cgi?id=171
> >>>>> https://jersey.dev.java.net/issues/show_bug.cgi?id=172
> >>>>>
> >>>>> Gili
> >>>>>
> >>>>>
> >>>>> Gili wrote:
> >>>>>>
> >>>>>> It's taking me forever to debug this, but in the process of
> >>>>>> troubleshooting I noticed that MultiPartReader isn't annotated
> >>>>>> with
> >>>>>> @Provider as required according to MessageBodyReader's
> >>>>>> specification. The
> >>>>>> Javadoc reads "To add a MessageBodyReader implementation,
> >>>>>> annotate
> >>>>>> the
> >>>>>> implementation class with @Provider". Could this be it? It still
> >>>>>> doesn't
> >>>>>> explain why this works under Glassfish without the annotation.
> >>>>>>
> >>>>>> Gili
> >>>>>>
> >>>>>>
> >>>>>> Gili wrote:
> >>>>>>>
> >>>>>>> I took my existing webapp, moved from Glassfish v2 to Tomcat and
> >>>>>>> all of a
> >>>>>>> sudden I get:
> >>>>>>>
> >>>>>>> SEVERE: A message body reader for Java type, class
> >>>>>>> com.sun.jersey.multipart.MultiPart, and MIME media type,
> >>>>>>> multipart/
> >>>>>>> mixed,
> >>>>>>> was not found
> >>>>>>>
> >>>>>>> I'm guessing that Jersey provider scanning is failing under
> >>>>>>> Tomcat
> >>>>>>> for
> >>>>>>> some reason...? Paul, Craig can you guys confirm this?
> >>>>>>>
> >>>>>>> Thanks,
> >>>>>>> Gili
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>>
> >>>>> --
> >>>>> View this message in context:
> >>>>>
> http://n2.nabble.com/Jersey-provider-detection-fails-under-Tomcat--tp1688690p1696750.html
> >>>>> Sent from the Jersey mailing list archive at Nabble.com.
> >>>>>
> >>>>>
> >>>>>
> ---------------------------------------------------------------------
> >>>>> To unsubscribe, e-mail: users-unsubscribe@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=0>
> >>>>> For additional commands, e-mail: users-help@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=1>
> >>>>>
> >>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: users-unsubscribe@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=2>
> >>>> For additional commands, e-mail: users-help@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=3>
> >>>>
> >>>>
> >>>>
> >>>
> >>> --
> >>> View this message in context:
> >>>
> http://n2.nabble.com/Jersey-provider-detection-fails-under-Tomcat--tp1688690p2118383.html
> >>> Sent from the Jersey mailing list archive at Nabble.com.
> >>>
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: users-unsubscribe@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=4>
> >>> For additional commands, e-mail: users-help@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=5>
> >>>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=6>
> >> For additional commands, e-mail: users-help@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=7>
> >>
> >>
> >>
> >
> > --
> > View this message in context:
> http://n2.nabble.com/Jersey-provider-detection-fails-under-Tomcat--tp1688690p2118627.html
> > Sent from the Jersey mailing list archive at Nabble.com.
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=8>
> > For additional commands, e-mail: users-help@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=9>
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=10>
> For additional commands, e-mail: users-help@...
> <http://n2.nabble.com/user/SendEmail.jtp?type=node&node=2121811&i=11>
>
>
>
> ------------------------------------------------------------------------
> This email is a reply to your post @
> http://n2.nabble.com/Jersey-provider-detection-fails-under-Tomcat--tp1688690p2121811.html
> You can reply by email or by visting the link above.
>

-- 
View this message in context: http://n2.nabble.com/Jersey-provider-detection-fails-under-Tomcat--tp1688690p2122391.html
Sent from the Jersey mailing list archive at Nabble.com.