CXF Rest Client不处理我的对象

时间:2012-10-05 19:09:08

标签: java json cxf jackson

我使用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的提供程序列表来解决此问题,该方法解析了对象的编组。

然后我尝试执行Read操作,该操作返回一个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删除提供程序来解决此问题,但这会导致Create操作失败。

我似乎无法解决此问题(使用相同的客户端对象时)。有人遇到过这种情况么?我做错了什么?

1 个答案:

答案 0 :(得分:5)

此问题源于使用Jackson作为JSON映射器。在我的界面定义中,我正在返回一个Response对象,杰克逊/ CXF不知道如何处理,所以杰克逊不会写它。

解决方案是:

JacksonJsonProvider provider = new JacksonJsonProvider();
provider.addUntouchable(Response.class);
providerList.add(provider);         
webService = JAXRSClientFactory.create(url, IWebService.class, providerList);