2012-02-25 9 views
6

サービスとクライアントの両方でJerseyを使用しています。私は、サービスを呼び出すためにしようとしていたとき、私はこのエラーを取得する: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) 

私は理由を理解していません。ここで

はサービスです。

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

、これはクライアントです:

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

私は本当に問題は何ができるかについては考えています。私は一見同一の主題で別の質問を知っていますが、そうではありません。

私が何かを見逃している場合や追加情報が必要な場合は教えてください。

答えて

6

204は、返されるコンテンツがないことをクライアントに通知するHTTP応答ステータスコードです。 クライアントがget(JSONArray.class)を呼び出すと、データとともに200となるため、例外が発生します。 サーバの実装から、配列変数がインスタンス化されないので、リストが空でない場合はarray.add()のNPEになる可能性がありますが、この場合はリストが空のように見えるので、forループは反復されず、getOverviewEntitiesメソッドはnullを返します。したがって、204の結果

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

はい、これで問題は解決しました。今私はステータス500(内部サーバーエラー)を取得しています。しかしそれは別の質問です。どうもありがとう! – Dragos

関連する問題