Не удается разобрать список элементов из XML с Джексоном - PullRequest
0 голосов
/ 25 августа 2018

, когда я пытаюсь проанализировать следующий XML, я получаю сообщение об ошибке с Джексоном:

<root>
  <aCollection>
    <language xml:lang="en">
      <entry id="1" value="foo"/>
      <entry id="2" value="bar"/>
      <entry id="3" value="blah"/>
    </language>
  </aCollection>
</root>

Используются следующие классы:

@Data
@JacksonXmlRootElement(localName = "root")
public class RootDTO {
  @JacksonXmlProperty(localName = "aCollection")
  private CollectionDTO collection;
}

@Data
public class CollectionDTO {
  @JacksonXmlProperty(localName = "language")
  LanguageDTO language;
}

@Data
public class LanguageDTO {
  @JacksonXmlProperty(localName = "entry")
  EntryDTO[] entries;
}

@Data
public class EntryDTO {

  @JacksonXmlProperty(isAttribute = true)
  private String id;

  @JacksonXmlProperty(isAttribute = true)
  private String value;

}

Ошибка: Can not instantiate value of type [simple type, class com.tinkerdesk.viewer.model.DTO.EntryDTO] from JSON String; no single-String constructor/factory method

Если я уберу скобки массива, это сработает, но, конечно, анализирует только первый entry элемент.Я обнаружил, что, возможно, мне следует использовать @JacksonXmlElementWrapper(useWrapping = false) поверх EntryDTO[] entries;, поскольку элементы не обернуты.Однако это не компилирует меня, потому что в 1014 * нет useWrapping.Моя основная версия Jackson - 2.9.6 и xml-databind 0.6.2.Есть ли сейчас новый способ сделать это?

1 Ответ

0 голосов
/ 26 августа 2018

Ладно, я сделал глупую ошибку. Во-первых, версия Jackson Dataformat Xml версии 0.6.2 должна была вызвать у меня подозрения. Кажется, в какой-то момент они переехали в новое пространство имен, и я использовал старое пространство имен в Gradle, которое, к сожалению, перешло в репозиторий maven, который последний раз обновлялся в 2011 году. Обновление пространства имен позволило разрешить 2.9.5 со свойством useWrapping. Установка этого решала проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...