4

RESTful Web サービスのインターフェースから、JAXRSClientFactory を使用して CXF クライアント プロキシを作成しています。

私のインターフェースは CRUD 操作を表すので、私の create はカスタム オブジェクトを受け取り、そこから DB エントリを作成します。オブジェクトを create メソッドに渡すと、次のようになります。

org.apache.cxf.jaxrs.client.ClientWebApplicationException: org.apache.cxf.interceptor.Fault: .No message body writer has been found for class : class com.example.Calss, ContentType : application/json.

JacksonJsonProviderメソッドにプロバイダー リストを追加することでこれを解決しました。これによりJAXRSClientFactory.create、オブジェクトのマーシャリングが解決されました。

Response次に、エンティティがカスタム オブジェクトであるオブジェクトを返す読み取り操作を実行しようとしました。読み込もうとすると、次のエラーが表示されます。

org.apache.cxf.jaxrs.client.ClientWebApplicationException: .Problem with reading the response message, class : class javax.ws.rs.core.Response, ContentType : application/json.

からプロバイダーを削除することでこれを解決できますJAXRSClientFactory.createが、これにより作成操作が失敗します。

この問題を解決できないようです (同じクライアント オブジェクトを使用している間)。他の誰かがこれに遭遇しましたか?私は何を間違っていますか?

4

1 に答える 1

5

この問題は、JSON マッパーとして Jackson を使用することに起因します。私のインターフェイス定義では、ResponseJackson/CXF が処理方法を知らないオブジェクトを返しているため、Jackson はそれを作成しません。

解決策はこれでした:

JacksonJsonProvider provider = new JacksonJsonProvider();
provider.addUntouchable(Response.class);
providerList.add(provider);         
webService = JAXRSClientFactory.create(url, IWebService.class, providerList);
于 2012-10-08T20:14:24.803 に答える