2008-10-15 9 views
19

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

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

ответ

8

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

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

+0

+1 для JiBX. Большим преимуществом, которое я вижу, является способ использования JiBX. Хотя генерация кода является опцией, кажется, что большое внимание уделяется написанию собственных сопоставлений для вашей собственной модели данных. Все, что мешает мне справляться с сгенерированными классами, делает меня счастливой. Я использовал JiBX в течение нескольких лет и любил его. Я не могу сказать то же самое о Касторе. :) – spaaarky21

0

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

3

Мы используем xstream. Марширование/разборки тривиально. См. Их tutorial.

+0

Ничего себе, это выглядит довольно пятно! –

+0

Xstream - это технология сериализации xml, а не технология привязки. – johnstok

+0

Да, разница между сериализацией и привязкой является важной. – erickson

2

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

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

2

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

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

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

+0

Кажется, здесь есть несколько хороших ссылок: http: // stackoverflow.com/questions/35785/xml-serialization-in-java –

+0

Просмотрите мой блог для примеров JAXB: http://bdoughan.blogspot.com –

1

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

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

BR,
~ A

12

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

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

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

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

+0

Спасибо за ваш вклад. Я ищу подходящее решение. Это для веб-службы RESTful с существующим XSD. Мы используем Castor в течение нескольких лет. Я хотел бы знать причины, по которым JAXB (или что-то еще) лучше/хуже. –

+0

Если вы знакомы с XStream по крайней мере, не могли бы вы проверить мой вопрос о XMLDecoder и XStream? http://stackoverflow.com/questions/96059/what-are-the-relative-advantages-of-xmlencoder-and-xstream – erickson

4

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

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

Binding документ XML для создаваемых классов так же просто, как:

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

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

Дон упоминается

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

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

Нет боевых действий с пространствами имен, Перемещение к объекту, который вы хотите развязать, и Factory.Pse it.

Желание я нашел это 2 недели назад.

0

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

+0

Это исследование с 2003 года - кто-нибудь знает что-нибудь современное? – Tom