users@jersey.java.net

Re: [Jersey] FW: xml schema in request and response (wadl)

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Thu, 12 Nov 2009 12:17:20 +0100

On Nov 11, 2009, at 5:21 PM, gerard davison wrote:

>
>
> On 10/11/2009 15:39, Paul Sandoz wrote:
>>
>> On Nov 10, 2009, at 4:05 PM, gerard davison wrote:
>>
>>> but I am not sure it would be required if the interface is
>>> properly generic).
>>>
>>
>> Agreed it should not be required. But GenericEntity can still be
>> useful if T = Object.
>
> Can you give an example of this? Won't most cases work with just a
> cast as you already know the type for a generic entity.
>

   @GET
   public Object get() {
   }

Object can be an instance of Response, GenericEntity or something
else. GenericEntity is also useful on the client side.


>>
>>
>>> I guess I am going to have to wait until 2.x for this. As to a
>>> workaround, it would be useful the WADL issue, I guess it could as
>>> simple as a generic subtype of these classes. I guess I will log
>>> that with the root issue which stated this discussion, hopefully I
>>> will have this done in a few days.
>>>
>>
>> I can add support for GResponse<T> and GResponseBuilder<T> in
>> Jersey. Ideally i would like those to inherit from Response and
>> ResponseBuilder but i am not sure that is possible because of
>> method ambiguity. Given that the simplest thing is to duplicate the
>> functionality and enable Response to be created from GResponse.
>
> In order for this to work in the WADL case the build method needs to
> return GResponse<T> so it can be used in the interface of the class.

Yes.


> Covariant return types should make it possible to create a subclass
> of ResponseBuilder that returns a more specific type.
>

To the caller methods will be ambiguous:

     public abstract class GResponse<T> extends Response {

         public static <T> GResponseBuilder<T> status(int status) {
            ...
         }

         ...

     }

The following line will not compile:

     GResponse<String> r = GResponse.<String>status(200).build();

Paul.