Hi Stephan-
I've been experimenting with the restlet.ext.jaxrs support, trying to
get a small test project working, and I've run into what seems like a
pretty big problem. While I am fairly new to JAX-RS, it is my
understanding that the suggested way of giving your Resource classes
access to other things in their environment (such as a persistence
service, a ServletContext, an osgi BundleContext, etc) is by creating
classes that extend javax.ws.rs.ext.ContextResolver, annotating them
with @Provider, and registering instances of them with the jax-rs
implementation. The container should then be able to inject these
custom objects into Resource classes that annotate a parameter or
field type with @Context.
For example, if I have a service class called StorageService, I would
create a ContextResolver like this:
@Provider
public class StorageServiceResolver extends ContextResolver<StorageService> {
private StorageService service;
public StorageServiceResolver(StorageService service) {
this.service = service;
}
public StorageService getContext(Class<?> type) {
return service;
}
}
I would then be able to access the StorageService object within my
Resource classes like this:
@Path("path/to/root/resource")
public class MyResource {
// should be able to do annotate a field:
@Context
private StorageService service;
// OR should be able to annotate a constructor param:
public MyResource(@Context StorageService service) {
this.service = service;
}
@GET
@Produces("text/plain")
public String getStoredThing(@QueryParam("id") String id) {
// and then access the service here:
return service.getValueForID(id);
}
}
But when I create such classes, and register them with your
JaxRsRestlet, the JaxRsRestlet refuses to accept the Resource classes,
claiming that they are missing any valid constructor or that a field
can not be injected with that type.
The problem may be that the methods in WrapperUtil.java don't make use
of the current set of "providers", but instead expect only the minimal
set of predefined context types.
Is there some other way I'm missing to give my Resource classes access
to my application environment?
thanks,
-Dave Fogel
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1361004