Stephan-
Maybe I should write shorter messages, so as to encourage people to
actually read them. :-)
As I said in my previous message, I tried to use field injection as
well as constructor param injection. Both attempts failed.
This is the log message I get when I try the annotated field approach
that you recommend:
Mar 20, 2009 12:48:14 PM
org.restlet.ext.jaxrs.internal.wrappers.ResourceClasses addRootClass
WARNING: The root resource class com.example.TestResource has an
illegal annotated and typed field: class com.example.StorageService
must not be annotated with @Context
Here is the method in your class
org.restlet.ext.jaxrs.internal.wrappers.params.ContextInjenctor
static Object getInjectObject(Class<?> declaringClass,
ThreadLocalizedContext tlContext, Providers providers,
ExtensionBackwardMapping extensionBackwardMapping)
throws IllegalTypeException, ImplementationException {
if (declaringClass.equals(Providers.class)) {
return providers;
}
if (declaringClass.equals(ContextResolver.class)) {
// NICE also throw, where the error occurs.
throw new IllegalTypeException(
"The ContextResolver is not allowed for @Context
annotated fields yet. Use
javax.ws.rs.ext.Providers#getContextResolver(...)");
}
if (declaringClass.equals(ExtensionBackwardMapping.class)) {
return extensionBackwardMapping;
}
if (declaringClass.equals(PathSegment.class)) {
final String msg = "The use of PathSegment annotated with
@Context is not standard.";
logger.config(msg);
return new GetLastPathSegment(tlContext);
}
if (declaringClass.equals(SecurityContext.class)
|| declaringClass.equals(HttpHeaders.class)
|| declaringClass.equals(Request.class)) {
return tlContext;
}
if (declaringClass.equals(UriInfo.class)) {
throw new ImplementationException(
"You must not call the method
ContextInjector.getInjectObject(.......) with class UriInfo");
}
// NICE also allow injection of ClientInfo and Conditions. Proxies are
// required, because the injected objects must be thread local.
throw new IllegalTypeException(declaringClass
+ " must not be annotated with @Context");
}
It doesn't appear that this code currently supports having custom
ContextResolver providers (although they appear to be available in the
"providers" parameter).
I'd very much appreciate it if you could take a closer look at this-
seems like an important part of any JAX-RS implementation!
-Dave Fogel
On Fri, Mar 20, 2009 at 4:04 AM, Stephan Koops <[email protected]> wrote:
> Hi David,
>
> use
>
> �...@context
> private StorageServiceResolver serviceResolver;
>
> best regards
> Stephan
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1365883