Простое сопоставление / связывание Java XML с POJO? - PullRequest
10 голосов
/ 30 октября 2009

Я пытаюсь найти самый простой способ сопоставить 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 не позволяют мне указывать вложенные элементы. (т.е. стандартное имя / имя).

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

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

Спасибо

Ответы [ 4 ]

4 голосов
/ 07 июля 2010

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

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

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

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

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

3 голосов
/ 30 октября 2009

Эта статья может вам помочь ... она требует только, чтобы вы знали xpath http://onjava.com/onjava/2007/09/07/schema-less-java-xml-data-binding-with-vtd-xml.html

3 голосов
/ 30 октября 2009

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

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

2 голосов
/ 30 октября 2009

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

Если вы идете только в одну сторону (XML -> POJO), вы можете использовать Дигестер .

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

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