我使用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操作失败。
我似乎无法解决此问题(使用相同的客户端对象时)。有人遇到过这种情况么?我做错了什么?
答案 0 :(得分:5)
此问题源于使用Jackson作为JSON映射器。在我的界面定义中,我正在返回一个Response
对象,杰克逊/ CXF不知道如何处理,所以杰克逊不会写它。
解决方案是:
JacksonJsonProvider provider = new JacksonJsonProvider();
provider.addUntouchable(Response.class);
providerList.add(provider);
webService = JAXRSClientFactory.create(url, IWebService.class, providerList);