users@jersey.java.net

[Jersey] ComponentProvider ... Contract type not supported

From: Frank Rosenberger <frank.rosenberger_at_jena.de>
Date: Tue, 7 Feb 2017 14:13:19 +0100

Hi,
I am currently trying to integrate Jersey (version 2.22.2) into a OSGi
runtime based on Apache Felix. To be able to use Declarative Service
references (@Reference) in my resources I need to control the resource
lifecycle with OSGi instead of Jersey.
Chapter 23.3. Custom Life Cycle Management
<https://jersey.java.net/documentation/latest/ioc.html#d0e17152> of the
Jersey User Guide illustrates how the resource lifecycle can be taken
control over by implementing the
|org.glassfish.jersey.server.spi.ComponentProvider| SPI.
I did just that, but when I try to register my ComponentProvider
implementation I get the following error:

Contract interface org.glassfish.jersey.server.spi.ComponentProvider can
not be registered for component class
de.jena.servicehub.rs.OsgiResourceProvider: Contract type not supported.

I scoured the Jersey source code for the source of this error and ended
up at the org.glassfish.jersey.internal.inject.Providers class's
isSupportedContract(Class<?>) method. The method checks whether the
contract class of the class to be registered (i.e. the implemented
interface) is annotated with @Contract or if it is on one of two white
lists. Neither is true for the ComponentProvider interface. Thus Jersey
refuses to register my implementation.

Is this a bug or am I doing something wrong?

I am registering all providers and and resources programmatically on a
ResourceConfig instance which I use to initialize a ServletContainer
instance.

Regards
Frank Rosenberger



__________ Information from ESET Mail Security, version of virus signature database 14897 (20170207) __________

The message was checked by ESET Mail Security.
http://www.eset.com