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

Reply via email to