Здесь есть парень, который клянется, что JAXB - лучшая вещь со времен нарезанного хлеба. Мне любопытно узнать, что, по мнению пользователей Stack Overflow, использовать для JAXB и что делает его хорошим или плохим решением для этого случая.
Здесь есть парень, который клянется, что JAXB - лучшая вещь со времен нарезанного хлеба. Мне любопытно узнать, что, по мнению пользователей Stack Overflow, использовать для JAXB и что делает его хорошим или плохим решением для этого случая.
Ответы:
Я большой поклонник JAXB для работы с XML. По сути, он обеспечивает решение этой проблемы (я предполагаю, что знаком с XML, структурами данных Java и схемами XML):
Работать с XML сложно. Нужен способ взять XML-файл, который по сути является текстовым файлом, и преобразовать его в какую-то структуру данных, которой ваша программа может затем манипулировать.
JAXB возьмет написанную вами XML-схему и создаст набор классов, соответствующих этой схеме. Утилиты JAXB создадут иерархию структур данных для управления этим XML.
Затем JAXB можно использовать для чтения XML-файла, а затем для создания экземпляров сгенерированных классов, загруженных данными из вашего XML. JAXB также делает обратное: берет классы Java и генерирует соответствующий XML.
Мне нравится JAXB, потому что он прост в использовании и поставляется с Java 1.6 (если вы используете 1.5, вы можете загрузить JAXB .jars.) Способ создания иерархии классов интуитивно понятен и, по моему опыту, выполняет достойную работу. абстрагирование от «XML», чтобы я мог сосредоточиться на «данных».
Итак, чтобы ответить на ваш вопрос: я ожидал, что для небольших файлов XML JAXB может быть излишним. Это требует, чтобы вы создали и поддерживали схему XML, а также использовали «стандартные методы учебника» использования классов Java для структур данных. (Основные классы, небольшие внутренние классы для представления «узлов» и их огромная иерархия.) Итак, JAXB, вероятно, не так уж хорош для простого линейного списка «предпочтений» для приложения.
Но если у вас довольно сложная XML-схема и в ней содержится много данных, то JAXB - это просто фантастика. В моем проекте я преобразовывал большие объемы данных между двоичным (который использовался программой C) и XML (чтобы люди могли потреблять и изменять эти данные). Полученная в результате XML-схема была нетривиальной (много уровней иерархии, некоторые поля могли повторяться, другие - нет), поэтому JAXB был полезен, поскольку имел возможность манипулировать этим.
Вот причина не использовать его: страдает производительность. При маршалинге и демаршалинге возникает много накладных расходов. Вы также можете рассмотреть другой API для привязки XML-объекта, например JiBX: http://jibx.sourceforge.net/
Это «ORM для XML». Чаще всего используется вместе с JAX-WS (и действительно, реализации Sun разрабатываются вместе) для систем WS Death Star.
Я все время использую JAXB на работе, и мне это очень нравится. Он идеально подходит для сложных XML-схем, которые постоянно меняются, и особенно хорош для произвольного доступа к тегам в XML-файле.
Я ненавижу сутенерство, но я только что завел блог, и это буквально первое, о чем я писал!
Посмотрите здесь:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
С помощью JAXB вы можете автоматически создавать XML-представления ваших объектов (маршалинг) и объектные представления XML (немаршалинг).
Что касается схемы XML, у вас есть два варианта:
Существуют также несколько более простых библиотек сериализации XML, таких как XStream , Digester или XMLBeans, которые могут быть альтернативой.
JAXB отлично подходит, если вам нужно кодировать некоторую внешнюю спецификацию XML, определенную как XML schema ( xsd
).
Например, у вас есть торговое приложение, и вы должны сообщать о сделках в приложение Uber Lame Trade Reporting, которое они дали вам ultra.xsd
для работы. Используйте $JAVA_HOME/bin/xjc
компилятор, чтобы превратить XML в набор классов Java (например UltraTrade
).
Затем вы можете просто написать простой слой адаптера для преобразования ваших торговых объектов UltraTrades
и использовать его JAXB
для распределения данных в Ultra-Corp. Намного проще, чем возиться с преобразованием ваших сделок в их формат XML.
Все это терпит крах, когда Ultra-Corp на самом деле не соблюдает свои собственные спецификации, и сделка, price
которая у них снижается, xsd:float
должна быть выражена как double
!
Зачем нам нужен JAXB? Удаленные компоненты (написанные на Java) веб-служб используют XML как средство обмена сообщениями между собой. Почему XML? Поскольку XML считается легковесным вариантом обмена сообщениями в сетях с ограниченными ресурсами. Очень часто нам нужно преобразовать эти XML-документы в объекты и наоборот. Например: Simple Java POJO Employee может использоваться для отправки данных Employee удаленному компоненту (также программе Java).
class Employee{
String name;
String dept;
....
}
Это Pojo должно быть преобразовано (Маршалл) в документ XML следующим образом:
<Employee>
<Name>...</Name>
<Department>...</Department>
</Employee>
А в удаленном компоненте - обратно к объекту Java из XML-документа (Un-Marshall).
Что такое JAXB?
JAXB - это библиотека или инструмент для выполнения этой операции маршалинга и демаршалинга. Это очень просто избавляет вас от этой головной боли.
Вы также можете попробовать JIBX. Это также очень хороший связыватель XML-данных, который также специализируется на OTA (Open Travel Alliance) и поддерживается серверами AXIS2. Если вам нужна производительность и совместимость, вы можете это проверить:
JAXB обеспечивает повышенную производительность за счет оптимизации маршалинга по умолчанию. JAXB определяет программный API для чтения и записи объектов Java в документы XML и из них, что упрощает чтение и запись XML через Java.