Привязка Java XML [закрыто]
Вопрос
Что вы используете для привязки XML к Java?JAXB, Castor и XMLBeans — вот некоторые из доступных вариантов.Все сравнения, которые я видел, были сделаны три или четыре года назад.Я открыт для других предложений.Особый интерес представляют производительность маршаллинга/демаршаллинга и простота использования.
Уточнение:Я хотел бы увидеть не только то, какой фреймворк вы используете, но и ваши аргументы в пользу использования одного по сравнению с другими.
Решение
ДжиБХ.Раньше я использовал Кастор XML, но JiBX оказался значительно лучше, особенно с точки зрения производительности (прямой порт некоторого кода приложения из Castor XML в JiBX сделал его в 9 раз быстрее).Я также обнаружил, что формат сопоставления JiBX более элегантен, чем у Castor.
JiBX достигает своей производительности за счет использования манипуляций с байт-кодом после компиляции, а не за счет отражения, принятого в Castor.Преимущество этого подхода заключается в том, что он предъявляет меньше требований к способу написания отображаемых классов.Нет необходимости в геттерах, сеттерах и конструкторах без аргументов только для удовлетворения потребностей инструментов.В большинстве случаев вы можете написать класс, не задумываясь о вопросах сопоставления, а затем сопоставить его без изменений.
Другие советы
Если вы хотите принять обоснованное решение, вам необходимо четко понимать, почему вы выполняете перевод между объектами XML и Java.Причина в том, что различные технологии в этой области пытаются решить разные проблемы.Различные инструменты делятся на две категории:
- Привязка данных XML — относится к процессу представления информации в документе XML как объекта в памяти компьютера.Обычно это означает определение XSD и создание эквивалента исходного кода Java.Взаимодействие между разными языками является главным приоритетом (отсюда и использование XSD) — чаще всего для реализации веб-сервисов на основе SOAP.
- Сериализация 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.
БР,
~А
Связанный: Сериализация XML в Java?
XmlBeans — хороший выбор, особенно если у вас есть «сломанные» файлы XSD/WSDL.
Дон упомянул
Документы сотрудников empDoc = Документы сотрудников.Фабрика.parse(xmlFile);
...но он также может принимать Узел, Файл или любой другой источник.
Нет борьбы с пространствами имен, перейдите к объекту, который вы хотите Unmarshall, и Factory.parse It.
Жаль, что я не нашел его 2 недели назад.
Мы используем Кастор.Это вполне соответствует нашим потребностям.
Меня задавал точно такой же вопрос, и наконец я нашел тесты производительности, сделанные IBM. http://www.ibm.com/developerworks/library/x-databdopt2/.Думаю, JiBX — мой выбор, хе-хе.