2016-07-27 4 views
0

カスタム@XmlRootElementレスポンスオブジェクトを返してうまく機能するJersey 1.19 REST Webサービスがあります。com.owlike.genson.JsonBindingException:クラスjavax.ws.rs.core.Responseを入力して非直列化できませんでした

javax.ws.rs.WebApplicationException: com.owlike.genson.JsonBindingException: Could not deserialize to type class javax.ws.rs.core.Response 
    at com.owlike.genson.ext.jaxrs.GensonJsonConverter.readFrom(GensonJsonConverter.java:127) 
    at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:634) 

レスポンスタイプ:MyResponseを返し

@XmlRootElement 
public class MyResponse { 
    public String message; 
} 

エンドポイント:

@GET 
@Path("/info") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public MyResponse getInfo(){ 
    return new MyResponse(); 
} 
私は後でjavax.ws.rs.core.Responseを主張すべきテストを実行する場合しかし、私は例外を取得します

関連ライブラリを含むpom.xmlのフラグメント:

<dependency> 
    <groupId>com.google.code.gson</groupId> 
    <artifactId>gson</artifactId> 
    <version>2.2.4</version> 
    <scope>compile</scope> 
</dependency> 

<dependency> 
    <groupId>com.owlike</groupId> 
    <artifactId>genson</artifactId> 
    <version>1.4</version> 
</dependency> 

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.1.3</version> 
</dependency> 

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>1.19</version> 
</dependency> 

<dependency> 
    <groupId>com.sun.jersey.jersey-test-framework</groupId> 
    <artifactId>jersey-test-framework-grizzly2</artifactId> 
    <version>1.19</version> 
    <scope>test</scope> 
</dependency> 

この問題を解決するにはどうすればよいですか?

+1

:com.sun.jersey.api.client.ClientResponseへの対応から予期される型を変更しました。使用するコードを投稿する必要があります。 – eugen

+0

が更新されました。私のカスタム固有の型MyResponseを逆シリアル化するとうまく動作しますが、javax.ws.rs.core.Responseでラップする必要があると思います。私がJersey 2でテストしたとき、それは問題ではありませんでした。 – Justas

答えて

1

クライアント側で問題でした。あなたは、あなたのターゲットのPOJOタイプではありませんjavax.ws.rs.core.Responseにデシリアライズすることになっている

protected ClientResponse executeGet(String path){ 
    WebResource resource = resource().path(path); 
    Builder builder = resource.header("Content-Type", "application/json;charset=UTF-8"); 
    return builder.get(ClientResponse.class); 
} 
関連する問題