users@jersey.java.net

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

From: gerard davison <gerard.davison_at_oracle.com>
Date: Fri, 13 Nov 2009 15:02:47 +0000

On 12/11/2009 11:17, Paul Sandoz wrote:
>>
>> 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.

Yup, sorry forgot about that case.
> 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.

I had a little bit of a play with this and came up with an example that
appears to build. I might again be missing some important step as I
haven't built a fully working example.

Cheers,

Gerard


import java.net.URI;

import java.util.Date;
import java.util.List;
import java.util.Locale;

import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.NewCookie;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Variant;


public abstract class GenericResponse<T> extends Response {

    public abstract T getEntity();


    public static <T> GenericResponseBuilder<T> status(int p1) {
        return null; // Return some kind of trivial wrapper of the
ResponseBuilder
    }

   
    public static abstract class GenericResponseBuilder<T> extends
Response.ResponseBuilder {

        public abstract GenericResponse<T> build();

        public abstract GenericResponseBuilder<T> status(int i);

         // ..... All the other methods with the new return type
    }
   
   
    public static void main(String[] args) {

        GenericResponse<String> r = GenericResponse
                              .<String>status(200) // Return a
GenericResponseBuilder<String>
                              .build(); // Return a GenericResponse<String>

    }

}




-- 
Gerard Davison | Senior Principal Software Engineer | +44 118 924 5095
Oracle JDeveloper Web Service Tooling Development
Oracle Corporation UK Ltd is a company incorporated in England & Wales.
Company Reg. No. 1782505.
Reg. office: Oracle Parkway, Thames Valley Park, Reading RG6 1RA.
Blog http://kingsfleet.blogspot.com