Сериализированный XML вложен в автоматически сгенерированные классы Java - PullRequest
0 голосов
/ 08 мая 2018

Учитывая файл .xsd, у меня была стратегия использовать инструмент Maven для генерации Java-классов из этого, а затем использовать Джексона для сериализации данных.

Я использую:

  • org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.3 для генерации классов Java
  • com.fasterxml.jackson.dataformat.xml.XmlMapper (2.9.2) с new JaxbAnnotationModule() для сериализации

Пример сгенерированного кода:

@XmlElement(required = true)
protected List<TLocalizedString> title;

Пример использования:

TLocalizedString tls = new TLocalizedString();
tls.setValue( string );
tls.setLocale( LOCALE );
item.getTitle().add( tls );

Мы получаем:

<item ....>
    <title>
        <title locale="en_US">The Title</title>
    </title>

То, что мы ожидали:

<item ....>
    <title locale="en_US">The Title</title>

Другими словами XML

Это то, что должно контролироваться:

  • В коде в точке использования?
  • В конфигурации для сериализатора Джексона?
  • При генерации кода через конфиг или флаги генерации?
  • При генерации кода через .xsd меняется?

1 Ответ

0 голосов
/ 08 мая 2018

Наконец-то нашел ответ. Я видел много примеров использования этого конфига, но понятия не имел, что он на самом деле делает. Именно этот отчет об ошибке дал мне подсказку через фразу

элемент-обертка для списков

XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setDefaultUseWrapper( false ); // This prevents unnecessary nesting of XML elements
...