Вопрос

Что вы используете для привязки XML к Java?JAXB, Castor и XMLBeans — вот некоторые из доступных вариантов.Все сравнения, которые я видел, были сделаны три или четыре года назад.Я открыт для других предложений.Особый интерес представляют производительность маршаллинга/демаршаллинга и простота использования.

Уточнение:Я хотел бы увидеть не только то, какой фреймворк вы используете, но и ваши аргументы в пользу использования одного по сравнению с другими.

Это было полезно?

Решение

ДжиБХ.Раньше я использовал Кастор XML, но JiBX оказался значительно лучше, особенно с точки зрения производительности (прямой порт некоторого кода приложения из Castor XML в JiBX сделал его в 9 раз быстрее).Я также обнаружил, что формат сопоставления JiBX более элегантен, чем у Castor.

JiBX достигает своей производительности за счет использования манипуляций с байт-кодом после компиляции, а не за счет отражения, принятого в Castor.Преимущество этого подхода заключается в том, что он предъявляет меньше требований к способу написания отображаемых классов.Нет необходимости в геттерах, сеттерах и конструкторах без аргументов только для удовлетворения потребностей инструментов.В большинстве случаев вы можете написать класс, не задумываясь о вопросах сопоставления, а затем сопоставить его без изменений.

Другие советы

Если вы хотите принять обоснованное решение, вам необходимо четко понимать, почему вы выполняете перевод между объектами XML и Java.Причина в том, что различные технологии в этой области пытаются решить разные проблемы.Различные инструменты делятся на две категории:

  1. Привязка данных XML — относится к процессу представления информации в документе XML как объекта в памяти компьютера.Обычно это означает определение XSD и создание эквивалента исходного кода Java.Взаимодействие между разными языками является главным приоритетом (отсюда и использование XSD) — чаще всего для реализации веб-сервисов на основе SOAP.
  2. Сериализация XML — это запись графа объектов в памяти в поток, чтобы его можно было восстановить где-нибудь или когда-нибудь еще.Вы пишете классы Java вручную;представление xml имеет второстепенное значение.Кроме того, потребность в производительности часто выше, а потребность во взаимодействии с другими языками, такими как .net, часто ниже.

Для сериализации XML трудно превзойти Xstream.JAXB — это стандарт привязки XML.

В любом случае, если вы используете J2EE, вам необходимо уделять пристальное внимание классам, полученным из JPA, поскольку прокси классов и типы коллекций, специфичные для персистентности, могут сбить с толку инструменты привязки/сериализации.

Если у вас есть XSD для XML и вам не нужно привязывать данные к существующему набору классов, то мне очень нравится XMLBeans.По сути, это работает следующим образом:

  • Скомпилировать XSD
  • Используйте сгенерированные классы Java для чтения/записи документов, соответствующих этой схеме.

Привязка XML-документа к сгенерированным классам выполняется так же просто, как:

EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile); 

Мы используем xstream.Маршалинг/демаршалинг тривиален.Посмотрите их руководство Например.

Джибкс это то, что здесь используется.Это очень быстро, но привязки могут быть немного сложнее.Однако это особенно полезно, если у вас есть схемы XML, описывающие объекты вашего домена, поскольку они действительно хорошо сопоставляются с XSD (есть даже бета-инструмент XSD2Jibx, который может принимать XSD и создавать классы-заглушки домена и сопоставления, которые вы затем можете взять и уговорить использовать). соответствовать существующей модели домена).

Он манипулирует байт-кодом, поэтому его необходимо запускать после первоначальной компиляции файлов Java .class.Вы можете использовать для этого плагин Maven или просто использовать его напрямую (кажется, плагин Eclipse у меня не работал).

Я использовал Jaxb с переменным успехом.В то время (пару лет назад) общая документация была тусклой, а базовую документацию по использованию (включая места для загрузки реализаций) было трудно найти или разнообразить.

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

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

Я использовал касторку 7 лет назад — она работала довольно хорошо.использовали DTD.В то время не так много вариантов.

В текущих проектах я использовал
1) JAXB — на основе стандартов, доступна эталонная реализация, доступны инструменты командной строки и ant.последняя версия - 2.1.8 требует Java 5+.
2) XStream - для демаршаллинга Soap - требуется Java 5+.Он не такой быстрый и соответствует стандартам, как последняя версия JAXB.

БР,

XmlBeans — хороший выбор, особенно если у вас есть «сломанные» файлы XSD/WSDL.

Дон упомянул

Документы сотрудников empDoc = Документы сотрудников.Фабрика.parse(xmlFile);

...но он также может принимать Узел, Файл или любой другой источник.

Нет борьбы с пространствами имен, перейдите к объекту, который вы хотите Unmarshall, и Factory.parse It.

Жаль, что я не нашел его 2 недели назад.

Мы используем Кастор.Это вполне соответствует нашим потребностям.

Меня задавал точно такой же вопрос, и наконец я нашел тесты производительности, сделанные IBM. http://www.ibm.com/developerworks/library/x-databdopt2/.Думаю, JiBX — мой выбор, хе-хе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top