2012-10-05 80 views
3

我使用JAXRSClientFactory從我的RESTful Web服務的接口創建CXF客戶端代理。CXF Rest客戶端不處理我的對象

我的界面代表CRUD操作,所以我的創建需要一個自定義對象並從中創建一個數據庫條目。當我通過我的對象創建方法,我會得到這樣的:

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. 

我通過添加提供程序列表與JacksonJsonProviderJAXRSClientFactory.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取出提供商解決這個問題,但是這會導致創建操作失敗。

我似乎無法解決此問題(同時使用相同的客戶端對象)。有人遇到過這種情況麼?我究竟做錯了什麼?

回答

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); 
+0

我掙扎這麼多。這和所有我發現提到Spring配置的例子! – phury

+0

很高興我能幫到你。 – Nicholas

+0

如果您在JSONProvider之前使用過,則還可以將註釋的模型類中的導入更改爲com.fasterxml.jackson.annotation。 –