2013-11-27 19 views
1

我正在使用Apache CXF來使用一個公司的Restful API。我收到以下錯誤。Apache CXF作爲restful API的客戶端 - 沒有發現類消息正文writer

原因:org.apache.cxf.jaxrs.client.ClientWebApplicationException:org.apache.cxf.interceptor.Fault:.No已發現消息正文作者爲class:class org.codehaus.jettison.json.JSONObject ,ContentType:application/json。

這裏是我的代碼:

public static void main(String[] args) { 
     try { 
      WebClient client = WebClient.create("https://aboti.securemanaged.com/rest/user"); 
      client.type(MediaType.APPLICATION_JSON); 
      client.accept(MediaType.APPLICATION_JSON); 
      JSONObject obj = new JSONObject("{\"Id\":1,\"name\":\"Alice\",\"version\":\"1.0.0\"}"); 
      System.out.println("Sending" + obj.toString()); 
      //Response responseData = client.post(obj); 
      String responseData = client.post(obj, String.class); 
      System.out.println("Engine one started: " + responseData); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

    } 

但是當我做捲曲I「m到處有效的JSON響應如下:

curl "https://aboti.securemanaged.com/rest/user" -X POST -d '{"Id":1,"name":"Alice","version":"1.0.0"}' 

{"trackingId":1564,"statusCode":"registered","status":"1"} 

我想在我的分發程序Servlet添加一個默認的提供者如下: 但我不知道如何配置WebClient實例以使用此默認提供程序..或者這不是問題嗎?

<jaxrs:client id="serviceId" serviceClass="" address="https://aboti.securemanaged.com/rest/user"> 
     <jaxrs:providers> 
      <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"> 
       <property name="mapper" ref="jacksonMapper" /> 
      </bean> 
     </jaxrs:providers> 
    </jaxrs:client> 
    <bean id="jacksonMapper" class="org.codehaus.jackson.map.ObjectMapper"/> 
    <bean id="jacksonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" /> 

回答

2

試試這個:

List<Object> providers = new ArrayList<Object>(); 
providers.add(new JacksonJaxbJsonProvider()); 

,然後當你創建你的Web客戶端添加提供程序列表中的第二個參數:

WebClient client = WebClient.create("https://aboti.securemanaged.com/rest/user", providers);