users@jersey.java.net

Re: [Jersey] Re: Adding _at_Provider via META-INF/services, injecting @Context Providers?

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Tue, 28 Apr 2009 13:51:32 +0200

On Apr 27, 2009, at 6:51 PM, Tatu Saloranta wrote:

> On Mon, Apr 27, 2009 at 4:12 AM, Paul Sandoz <Paul.Sandoz_at_sun.com>
> wrote:
> ...
>>> My problem seems to be the next step; ensuring that my
>>> ContextProvider<T> matches with call. Looks like MediaType doesn't
>>> match by default for some reason (if I pass type I get in).
>>
>> Can you show me the implementation code?
>
> Sure. I'll attach the full file, but here's the snippet I think is
> relevant:
>
> ---
> protected ObjectMapper _getMapper(Class<?> type, MediaType
> mediaType)
> {
> // First: were we configured with an instance?
> if (_configuredMapper != null) {
> return _configuredMapper;
> }
>
> // If not, maybe we can get one configured via context?
> ContextResolver<ObjectMapper> resolver =
> _providers.getContextResolver(ObjectMapper.class, mediaType);
> // Not registered with media type, how about without?
> if (resolver == null) {
> resolver =
> _providers.getContextResolver(ObjectMapper.class, null);

> }
> ---
>

I think there is an issue further on:

         if (resolver != null) {
             ObjectMapper mapper =
resolver.getContext(ObjectMapper.class);

You should be passing in the "type" argument rather than
ObjectMapper.class


             if (mapper != null) {
                 return mapper;
             }
         }


> Oh, and the other part is the provider for ObjectMapper:
>


> ---
> @Provider
> /* Produces ObjectMappers for all types...
> * not sure what's the magic incantation; default should be "any types"
> */
> @Produces
> public final class ObjectMapperHolder
> implements ContextResolver<ObjectMapper>
> {
> //....
> public ObjectMapper getContext(Class<?> type)
> {
> if (type == ObjectMapper.class) { // should always be true
> return _mapper;

The type should never be equal to ObjectMapper.class unless you want
to marshall/unmarshall ObjectMapper.


What trouble are you running into, are instances of
ContextResolver<ObjectMapper> being created? is the getContext method
being called?

Paul.

>
> }
> return null;
> }
> }
> ---
>
> So it should be some mismatch between media types... but I was unable
> to declare proper type in @Produces of provider.
>
> -+ Tatu +
> <
> JacksonJsonProvider
> .java
> >---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net