Простой Java Xml для сопоставления/привязки POJO?

Я пытаюсь найти самый простой способ сопоставить xml файл с простым старым Java-объектом.

Примечание. В моем примере xml не совсем совпадает с моим предполагаемым POJO.

///////// THE XML
<?xml version="1.0" encoding="UTF-8"?>
<Animal>
  <standardName>
    <Name>Cat</Name>
  </standardName>
  <standardVersion>
    <VersionIdentifier>V02.00</VersionIdentifier>
  </standardVersion>
</Animal>


////// THE INTENDED POJO
class Animal
{
 private String name;
 private String versionIdentifier;
}

Обычный JAXB (с аннотациями) не будет работать, поскольку аннотации имени JAXM Element не позволяют мне указывать вложенные элементы. (т.е. standardName/Name).

Я посмотрел на Jibx, но это кажется слишком сложным, и никаких полных примеров не предусмотрено для того, что я хочу делать.

Кастро кажется, что он сможет делать то, что я хочу (используя файлы сопоставления), но мне интересно, есть ли другие возможные решения. (Возможно, это позволит мне пропускать файлы сопоставления и просто разрешить мне указывать все в аннотациях).

Спасибо

Ответ 2

EclipseLink JAXB (MOXy) позволяет выполнять сопоставление на основе маршрутов, которое вы ищете:

@XmlRootElement 
class Animal 
{ 
 @XmlPath("standardName/Name/text()")
 private String name; 

 @XmlPath("standardVersion/VersionIdentifier/text()");
 private String versionIdentifier; 
} 

Для получения дополнительной информации см.

EclipseLink также позволяет указывать метаданные с помощью внешнего файла конфигурации:

Ответ 3

Jakarta Commons Digester должен делать то, что вы хотите.

В качестве альтернативы я бы рекомендовал написать класс преобразования, который использует XPath для извлечения элементов из XML.

Ответ 4

Я считаю JiBX лучшим из связки (JAXB, Castor, XMLBeans и т.д.), особенно потому, что я предпочитаю файлы сопоставления над аннотациями. По общему признанию, он имеет приличную кривую обучения, но на веб-сайте есть много хороших примеров. Вы, должно быть, пропустили tutorial.

Если вы идете только одним способом (XML → POJO), вы можете использовать Digester.

Боковой комментарий: я предпочитаю сопоставлять файлы через аннотации, потому что аннотации:

  • загромождать код (особенно при использовании аннотаций от нескольких продуктов)
  • проблемы смешивания (XML, база данных и т.д. в доменном слое)
  • может связывать только одно представление XML (или базы данных, веб-службы и т.д.)