Java-объект в XML-схему - PullRequest
       25

Java-объект в XML-схему

3 голосов
/ 04 ноября 2008

Если у вас есть объект Java и схема XML (XSD), как лучше всего взять этот объект и преобразовать его в файл xml в соответствии со схемой. Объект и схема не знают друг о друге (поскольку классы java не были созданы из схемы).

Например, в классе может быть целое поле totalCountValue, которое соответствует элементу countTotal в файле xsd. Есть ли способ создать отображение, которое скажет: «Если объект содержит int totalCountValue, создайте элемент с именем countTotal и поместите его в XML». Аналогичным образом, в объекте может быть поле, которое следует игнорировать, или список в объекте, который должен соответствовать нескольким элементам XML.

Я посмотрел на XStream, но не увидел (очевидного) способа сделать это. Существуют ли другие библиотеки XML, которые могут упростить эту задачу?

Ответы [ 7 ]

6 голосов
/ 04 ноября 2008

Я полагаю, что это может быть достигнуто через JAXB, используя его аннотации. Я обычно обнаружил, что гораздо проще генерировать объекты из JAXB (как определено в вашей схеме) с использованием XJC, чем сопоставлять существующий объект Java с соответствием моей схеме. YMMV.

4 голосов
/ 04 ноября 2008

Я делаю Object, делаю сериализацию XML с XStream. Что вы не находите "очевидным" с этим сериализатором? Как только вы это освоите, это очень просто.

В приведенном вами примере вы можете получить что-то вроде этого:

...
XStream xstream = new XStream(new DomDriver());

xstream.alias("myclass", MyClass.class);
xstream.aliasField("countTotal", MyClass.class, "totalCountValue");

String xml = xstream.toXML(this);
...

для этого образца класса:

class MyClass {
     private int totalCountValue;

     public MyClass() {
     }
} 

Если вы найдете какой-нибудь сериализатор более простым или «классным», чем этот, пожалуйста, поделитесь им с нами. Я также ищу изменения ...

Проверьте мини-учебник по XStream здесь

2 голосов
/ 07 ноября 2008

Я опробовал большинство предложенных библиотек, чтобы увидеть, какая из них наиболее подходит для моих нужд. Я также опробовал библиотеку, которая не была упомянута здесь, но предложена коллегой, которая была реализацией StAX под названием Woodstox .

По общему признанию, мое тестирование не было завершено для всех этих библиотек, но для цели, упомянутой в вопросе, я нашел Woodstox лучшим. Он самый быстрый для маршаллинга (в моем тестировании он побил XStream примерно на 30-40%). Он также довольно прост в использовании и управлении.

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

2 голосов
/ 04 ноября 2008

Я использую библиотеку Java с именем JiBx , чтобы выполнить эту работу. Вам нужно написать файл сопоставления (в формате XML), чтобы описать, как вы хотите, чтобы элементы схемы XML отображались на объекты Java. Есть пара инструментов генератора, которые помогут автоматизировать процесс. Плюс это действительно быстро.

1 голос
/ 06 ноября 2008

Взгляните на JDOM .

1 голос
/ 06 ноября 2008

Вы можете использовать библиотеку от Apache Commons, которая называется Betwixt . Он может отобразить bean-компонент в XML, а затем снова вернуться, если вам нужно совершить обратную передачу.

0 голосов
/ 10 февраля 2009

Я бы сказал, JAXB или Кастор. Я обнаружил, что Castor проще в использовании и надежнее, но JAXB - это стандарт

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