users@jersey.java.net

Re: [Jersey] A custom ResourceMethodDispatchProvider ...

From: Thierry Granger <grangert_at_yahoo-inc.com>
Date: Fri, 23 May 2008 13:42:08 +0200

Hi Paul,

Thank you for the information, I'll try asap.

regards,

Thierry

Paul Sandoz wrote:
> BTW if using the latest build you no longer need to use
> META-INF/services to register your dispatcher, just annotate your
> implementation with @Provider.
>
> Paul.
>
> Paul Sandoz wrote:
>> Hi Thierry,
>>
>> Well found!
>>
>> The order of checking dispatch providers was changed after 0.7, so
>> you should be able to override that of EntityParamDispatchProvider,
>> if you get the latest 0.8 build (note that the package name space
>> "com.sun.ws.rest" has been renamed to "com.sun.jersey").
>>
>> We have used this trick for experimenting with precondition support
>> using Scala partial functions [1] (or closures). And for
>> experimenting with Comet support.
>>
>> The reason why it is not exposed out as an SPI yet is i think it
>> needs some more design work to make it easier to use. Any feedback on
>> this would be much appreciated.
>>
>> Paul.
>>
>> [1] http://blogs.sun.com/sandoz/entry/using_scala_s_closures_with
>>
>> Thierry Granger wrote:
>>> Hi all,
>>>
>>> I'm using the jersey 0.7-ea, and I would like to perform some
>>> specific tasks using the computed parameters (ie: Object
>>> unmarshalled by JAXB, or query string parameters) before calling the
>>> resource method.
>>> For example,
>>> * I would like to check some credentials depending on the URI (for
>>> HTTP GET method) or depending on the XML content (for HTTP PUT/POST
>>> method).
>>> * I would like to dynamically modify some query string parameter,
>>> or xml content.
>>> * ...
>>>
>>> I was first thinking to use some ServletFilter, but in some case,
>>> that would mean we would perform twice the JAXB unmarshalling ...
>>> So, I investigate deeply into the jersey code, and I found the
>>> EntityParamDispatchProvider.java
>>> (https://jersey.dev.java.net/source/browse/jersey/tags/jersey-0.7/jersey/src/impl/com/sun/ws/rest/impl/model/method/dispatch/EntityParamDispatchProvider.java?rev=954&view=markup),
>>> and I saw that there is some "_dispatch()" method that deals with
>>> the parameters, the context, and the resource (in fact everything I
>>> need to perform my specific task :) ).
>>>
>>> So, here are my questions :
>>> * Am I looking to the good solution ? I mean, is there an easier
>>> way to deal with the parameters, the context, and the resource
>>> before the resource method call ?
>>> * Is there any way to inject a custom
>>> ResourceMethodDispatchProvider in replacement of the
>>> EntityParamDispatchProvider, or add a custom
>>> ResourceMethodDispatchProvider and manage the order of the lookup
>>> into the ResourceMethodDispatcherFactory.create method ?
>>>
>>> I added my class name into my own
>>> META-INF/services/com.sun.ws.rest.impl.model.method.dispatch.ResourceMethodDispatchProvider
>>> file, but my class is never use because the
>>> EntityParamDispatchProvider instance is always returned by the
>>> ResourceMethodDispatcherFactory before my custom
>>> ResourceMethodDispatchProvider. (I think that's because of the
>>> "rmdps.addFirst(rmdp);' line.
>>>
>>> I guess my questions are clear :) (it's not very easy to express my
>>> needs in English)
>>>
>>> Regards,
>>>
>>> Thierry
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>
>>
>