4

我正在使用 JAXRSClientFactory 从我的 RESTful Web 服务的界面创建一个 CXF 客户端代理。

我的界面代表 CRUD 操作,因此我的 create 接受一个自定义 Object 并从中创建一个 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

这个问题源于使用 Jackson 作为 JSON 映射器。在我的接口定义中,我返回了一个Response对象,Jackson/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 回答