Подтвердить что ты не робот

Связывание Java XML

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

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

BR,
~ А

Ответ 9

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

Дон упомянул

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

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

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

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

Ответ 10

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

Ответ 11

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