Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jersey Client response status 204

I am using Jersey for both service and client. When I am trying to call the service, I get this error:

Exception in thread "main" com.sun.jersey.api.client.UniformInterfaceException: GET http://localhost:8080/Maze/rest/service/overview?countryid=1 returned a response status of 204 No Content
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:528)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:506)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:674)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
at com.maze.client.MyClient.overviewTest(MyClient.java:34)
at com.maze.client.MyClient.main(MyClient.java:64)

I do not understand why.

Here is the service:

@GET
@Produces(MediaType.APPLICATION_JSON )
@Path("/overview")
public JSONArray getOverviewEntities(@QueryParam("countryid")String id){
    JSONArray array = null;
    try{
    Integer countryId = Integer.parseInt(id);
    ArrayList<Event> list = new ArrayList<Event>();
    EventService event = new EventService();
    EntityManagerSingleton.getInstance().getTransaction().begin();
    list.addAll(event.getList(countryId, "country", 5));
    EntityManagerSingleton.getInstance().getTransaction().commit();
    for(Event ev : list){
        array.add(EventService.toJSONObject(ev));
    }
    } catch(Exception e){
        e.printStackTrace();
    }
    return array;
}

and this is the client:

public static void overviewTest(){
    WebResource wbr;
    Client client = Client.create();
    wbr = client.resource("http://localhost:8080/Maze/rest/service/overview");  
    JSONArray result = wbr.queryParam("countryid", "1").accept(MediaType.APPLICATION_JSON).get(JSONArray.class);
    System.out.println(result.toString());
}

I really have no idea about what the problem could be. I am aware of another question here with a seemingly identical subject, but they are not.

Please let me know if I am missing something or if you need any extra info.

like image 962
Dragos Avatar asked Feb 25 '12 20:02

Dragos


1 Answers

204 is an HTTP response status code informing the client that there is no content returned. When your client calls get(JSONArray.class) it's expecting 200 with data, hence the exception. It looks from your server implementation that the array variable is never instantiated, so if your list were not empty, it would likely NPE in array.add(), but in this case it look like your list may be empty, so the for loop is not iterated up and getOverviewEntities method returns null, hence the 204 result.

JSONArray array = new JSONArray(); // should fix the issue :)
like image 89
TheArchitect Avatar answered Nov 03 '22 10:11

TheArchitect