I am using google guice and wish to integrate it with the JAX-RS extension. On 
the surface, everything is simple and clean:

    final JaxRsApplication application = new 
JaxRsApplication(component.getContext().createChildContext());
    application.setObjectFactory(new ObjectFactory() {

      @Override
      public <T> T getInstance(Class<T> jaxRsClass) throws InstantiateException 
{
        return Injector.getInstance(jaxRsClass);
      }
    });

True, when JAX-RS wishes to create an instance of a resource handler it 
consults the object factory first, which is excellent. But, there are certain 
validations that JAX-RS performs on the resource handler type and these 
validations totally ignore the presence of an object factory. Observer the 
following stack trace:

WrapperUtil.findJaxRsConstructor(Class<?>, String) line: 242    
PerRequestRootResourceClass(RootResourceClass).<init>(Class<?>, 
ThreadLocalizedContext, JaxRsProviders, ExtensionBackwardMapping, Logger) line: 
141     
PerRequestRootResourceClass.<init>(Class<?>, ThreadLocalizedContext, 
JaxRsProviders, ExtensionBackwardMapping, Logger) line: 82 
ResourceClasses.getPerRequestRootClassWrapper(Class<?>) line: 276       
ResourceClasses.addRootClass(Class<?>) line: 104        
JaxRsRestlet.addClass(Class<?>) line: 283       
JaxRsApplication.add(Application) line: 149     
Program.main(String[]) line: 60 

What happens is that JAX-RS looks for the public constructors satisfying its 
instance creation constraints. In my case, the resource handler class has a 
single public non default constructor not annotated with any of the JAX-RS 
attributes. Indeed, this constructor is invoked by the dependency injection 
engine only (guice in my case) from the object factory.

I think, that JAX-RS should not fail if it does not find any suitable 
constructor and the object factory is registered. Seems like a bug?

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2889440

Reply via email to