2017-05-25 113 views
0

我想JAXRS閱讀的文本/ XML響應MessageBodyProviderNotFoundException

Client client = ClientBuilder.newClient(); 
    String seLogerAPI = "http://ws.seloger.com/search.xml"; 
    // Defining some query params. Full doc : https://github.com/bodinsamuel/seloger-php/blob/master/API.md 
    // More : https://github.com/pasnox/housing/blob/master/SeLoger.com.api.txt 
    WebTarget target = client.target(seLogerAPI) 
      .queryParam("idtypebien", "1") // apartements 
      .queryParam("idtt", "1") // Renting 
      .queryParam("nb_pieces", "5") 
      .queryParam("cp", "95330") 
      ; 
    Response result = target.request(MediaType.TEXT_XML_TYPE).get(); 
    ResponseRecherche res = result.readEntity(new GenericType<ResponseRecherche>() {}); 
    System.out.println(res); 

消耗Web服務返回的XML數據。但是我面對這個錯誤:化MessageBodyReader找不到媒體類型=文本/ XML的,字符集= UTF- 8

Response result = target.request(MediaType.TEXT_XML_TYPE).get(); 

工作正常,但是當我試圖把它的POJO使用

ResponseRecherche res = result.readEntity(new GenericType<ResponseRecherche>() {}); 

提出org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException ...

參考:ResponseRecherche是一個POJO,它的結構與web服務的結果相同。我下面這個教程:https://vaadin.com/blog/-/blogs/consuming-rest-services-from-java-applications

我真的不明白爲什麼

我的pom.xml

 <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-client</artifactId> 
     <version>2.25</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-jaxb</artifactId> 
     <version>2.25</version> 
    </dependency> 

感謝您閱讀

回答

0

的錯誤消息,表明您的JAX-RS實現無法將XML轉換爲您的POJO(ResponseRecherche)。 JAX-RS使用MessageBodyReaders將響應實體轉換爲Java對象。所有JAX-RS實現都需要提供一組內置的MessageBodyReaders,但用戶可以提供自己的自定義轉換。

你可能有兩種解決方法: 1)使用內置的JAXB化MessageBodyReader - 這樣做,你將需要與JAXB註釋,比如@XmlRootElement等一個好的教程使用JAXB與JAX-註釋你的POJO RS - 包括如何註釋你的對象類可以在這裏找到: https://dennis-xlc.gitbooks.io/restful-java-with-jax-rs-2-0-2rd-edition/en/part1/chapter6/jaxb.html

2)創建並註冊自己化MessageBodyReader可以在XML從遠程站點轉換爲您ResponseRecherche對象。同樣的教程有關於如何創建這裏定製MessageBodyReaders一些有用的信息: https://dennis-xlc.gitbooks.io/restful-java-with-jax-rs-2-0-2rd-edition/en/part1/chapter6/custom_marshalling.html

注意,因爲你正在使用的JAX-RS客戶端API,你需要明確地註冊您的自定義化MessageBodyReader像這樣:

Client client = ClientBuilder.newClient(); 
client.register(MyMessageBodyReader.class); 

希望這有助於 安迪

+0

解決,我的POJO的確,我錯過了XmlRootElement將註釋!謝啦 ! – YukiAsuna