Hi David,
I've had no time to look into my own code or work with it, so I forget,
that the injection was changed.
Use a field (or parameter) of type javax.ws.rs.ext.Providers, annotate
it with @Context and use method getContextResolver(...) .
I hope, that's the right solution. As said, I've long time no time to
keep me busy with Restlet and JAX-RS. Sorry for the wrong information first.
best regards
Stephan
David Fogel schrieb:
> 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
>
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1388032