2012-02-25 12 views
6

Korzystam z usługi Jersey zarówno dla usługi, jak i dla klienta. Kiedy próbuję zadzwonić do usługi, pojawia się ten błąd:Status odpowiedzi klienta Jersey 204

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) 

Nie rozumiem dlaczego.

Oto serwis:

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

i to jest klient:

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

ja naprawdę nie mają pojęcia o tym, co może być problemem. Zdaję sobie sprawę z kolejnego pytania o pozornie identyczny temat, ale tak nie jest.

Proszę dać mi znać, jeśli czegoś brakuje lub jeśli potrzebujesz dodatkowych informacji.

Odpowiedz

6

204 to kod stanu odpowiedzi HTTP informujący klienta, że ​​nie ma zwróconej treści. Kiedy twój klient wywołuje get (JSONArray.class), spodziewa się 200 z danymi, stąd wyjątek. Z Twojej implementacji serwera wynika, że ​​zmienna tablicowa nigdy nie jest instancjonowana, więc jeśli twoja lista nie byłaby pusta, prawdopodobnie byłaby to NPE w tablicy array.add(), ale w tym przypadku wygląda na to, że twoja lista może być pusta, więc dla pętla nie jest iterowana, a metoda getOverviewEntities zwraca wartość null, stąd wynik 204.

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

Tak, to rozwiązało problem. Teraz otrzymuję status 500 (Wewnętrzny błąd serwera). Ale to chyba inne pytanie. Wielkie dzięki! – Dragos

Powiązane problemy