2016-09-20 4 views
0

Из-за старых проектных решений я работаю над проектом, который использует Джерси для подключения к службам, которые возвращают данные XML. Иногда я мог бы создать боб/POJO/независимо аннотированный с XmlRootElement и использовать webTarget.get(MyPojo.class)Джерси XML в карту

Однако, если я пытаюсь делать то, что я хотел бы сделать, скажем, Джексон, и сделать webTarget.get(Map.class) я получаю следующее сообщение об ошибке:

MessageBodyReader not found for media type=text/xml, type=interface java.util.Map, genericType=interface java.util.Map. 

Мое дело, у меня есть XML, который может иметь произвольные поля, поэтому идеальным способом для меня прочитать его - прочитать карту. Есть ли способ, которым я могу это сделать, не полагаясь на другие библиотеки? Мне не нужно сериализовать данные, а только десериализовать ответы от веб-сервисов, к которым я подключаюсь.

ответ

0

Нашел ответ, и это отвратительно.

В соответствии с Unofficial JAXB Guide вы не можете использовать Map в качестве корневого элемента, если только вы не делаете очень уродливый хак, описанный там. Таким образом, решения:

  1. Чтение как String и использовать Джексона читать Map из строки.
  2. Сделайте уродливый взлом.
  3. Опишите часть схемы в компоненте, но часть, которая может иметь переменные поля, может быть десериализована до Map.
Смежные вопросы