Как происходит связывание в JAX-Rs XML для объекта? - PullRequest
0 голосов
/ 22 мая 2019

Я изучал, как использовать веб-сервисы, и нашел хорошие статьи о JAX-R, и это способ использования Rest Webservices. моя задача состоит в том, чтобы нажать URL, который возвращает XML в качестве ответа и должен быть преобразован в объект, которого я достиг, используя следующий код.

 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 Ответ

0 голосов
/ 25 мая 2019

1: JAX-RS использует MessageBodyReaders для преобразования потока сущности HTTP в объект. По умолчанию все реализации JAX-RS необходимы для доставки MessageBodyReader (и Writer), который использует JAXB для сериализации / десериализации в / из XML, когда тип контента - application / xml.

2: Если вы хотите использовать что-то кроме JAXB для десериализации XML, вы можете написать свой собственный MessageBodyReader, который использует «application / xml». Это переопределит встроенный JAXB-ридер. Пример того, как это сделать, доступен здесь: https://memorynotfound.com/jax-rs-messagebodyreader/

Надеюсь, это поможет, Энди

...