我一直在探索如何消费Web服务,我在JAX-RS上找到了一篇很好的文章,这是消费REST WEBS服务的方法。我的任务是击中返回XML作为响应的URL,并应将其转换为我使用以下代码实现的对象。
client = ClientBuilder.newClient();
//example query params: ?q=Turku&cnt=10&mode=json&units=metric
target = client.target(
"http://api.openweathermap.org/data/2.5/weather")
.queryParam("appid", apikey)
.queryParam("units", "metric")
;
这是将我的XML响应映射到Java对象的代码
Example exampleObject = target.request(MediaType.APPLICATION_XML).get(Example.class);
这可以正常工作,但是问题是我的领导是说使用jibx,因为它更快。
问题1:target.Request如何转换XML响应(它使用JIBX或JAXB等?(问题2:如果我使用JIBX,我需要将响应下载为流,并进行编组和删除,这是我发现不正确的消费网络服务的方法,我是对的?
请为此提供帮助。
1:JAX-RS使用MessageBodyReaders将HTTP Entity Stream转换为对象。默认情况下,所有JAX-RS实现都需要运送MessageBodyReader(和Writer(,该消息使用JAXB在内容类型为应用程序/XML时使用JAXB序列化/deperialize to/trom XML。
2:如果您想使用JaxB以外的其他内容来挑选XML,则可以编写自己的MessageBodyReader,以消耗" Application/XML"。那将覆盖内置的JAXB阅读器。这里有一个可用的示例:https://memorynotfound.com/jax-rs-messagebodyreader/
希望这有帮助,安迪