7 Stimmen

Jersey Antwortstatus des Kunden 204

Ich verwende Jersey sowohl für den Dienst als auch für den Kunden. Wenn ich versuche, den Dienst aufzurufen, erhalte ich diesen Fehler:

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)

Ich verstehe nicht, warum.

Hier ist der Dienst:

@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;
}

und dies ist der Kunde:

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());
}

Ich habe wirklich keine Ahnung, was das Problem sein könnte. Ich bin mir bewusst, eine andere Frage hier mit einem scheinbar identischen Thema, aber sie sind nicht.

Bitte lassen Sie mich wissen, ob ich etwas übersehen habe oder ob Sie zusätzliche Informationen benötigen.

8voto

TheArchitect Punkte 2151

204 ist ein HTTP-Antwortstatuscode, der dem Client mitteilt, dass kein Inhalt zurückgegeben wurde. Wenn Ihr Client get(JSONArray.class) aufruft, erwartet er 200 mit Daten, daher die Ausnahme. Aus Ihrer Server-Implementierung geht hervor, dass die Array-Variable nie instanziiert wird. Wenn Ihre Liste also nicht leer wäre, würde es wahrscheinlich zu einer NPE in array.add() kommen, aber in diesem Fall sieht es so aus, als ob Ihre Liste leer sein könnte, so dass die for-Schleife nicht durchlaufen wird und die Methode getOverviewEntities null zurückgibt, daher das Ergebnis 204.

JSONArray array = new JSONArray(); // should fix the issue :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X