Question

Hey guys. I've developed some services in REST that are running on Glassfish 3.1.

I have a Java SE application and I am using Jersey as the client api.

 public <T> T findAll_JSON(Class<T> responseType) throws UniformInterfaceException {
    WebResource resource = webResource;
    return resource.accept(MediaType.APPLICATION_JSON).get(responseType);
}

This is the client code that is generated by Netbeans.

My main problem is passing a list of objects as the response type

Here is the client code.

   List<PkgLine> pkgLine = service.findAll_JSON(List.class);        
    System.out.println(pkgLine.get(5).getLineStatus());          
    service.close();

Obviously this is not working because the response needs to be a List of PkgLine. How do I pass that as a generic? My service is set to return the List of PkgLine. Thanks.

Was it helpful?

Solution

The problem is "erasure". You can declare a List<PkgLine> in your program, but at runtime the information that the objects in the List are PkgLines is erased. List<String>, List<PkgLine> and List<Object> are all the same type at runtime. (There's a reason why this is so; I won't explain it here but you can look up "erasure" if you are interested.)

The objects in the List are still PkgLines of course, but to the List they are just Objects, and you'll have to cast each one to a PkgLine. It's not pretty.

List<?> pkgLine = service.findAll_JSON(List.class);
System.out.println(((PkgLine)(pkgLine.get(5))).getLineStatus());
service.close();

OTHER TIPS

What about parsing an array? It has the same json represantation. You could write something like this:

resource.accept(MediaType.APPLICATION_JSON).get(PkgLine[].class);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top