Есть парень, который ругается, что JAXB - самая большая вещь, поскольку нарезанный хлеб. Мне любопытно узнать, что пользователи Qaru считают, что использование используется для JAXB, и что делает его хорошим или плохим решением для этого случая.
Что такое JAXB и почему я должен его использовать?
Ответ 1
Я большой поклонник 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 был полезен в возможности манипулировать этим.
Ответ 2
Вот причина не использовать его: производительность страдает. При маршалинге и разоблачении много накладных расходов. Вы также можете рассмотреть другой API для привязки XML-объектов - например, JiBX: http://jibx.sourceforge.net/
Ответ 3
Это "ORM для XML". Чаще всего используются вместе с JAX-WS (и, действительно, реализация Sun разрабатываются вместе) для систем WS Death Star.
Ответ 4
Я использую JAXB на работе все время, и мне это очень нравится. Он идеально подходит для сложных XML-схем, которые всегда меняются и особенно хороши для случайного доступа к тегам в XML файле.
Я ненавижу сутенера, но я только что начал блог, и это буквально первое, что я опубликовал!
Посмотрите здесь:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
Ответ 5
С помощью JAXB вы можете автоматически создавать представления XML ваших объектов (маршаллинг) и представления объектов XML (unmarshalling).
Что касается схемы XML, у вас есть два варианта:
- Создание классов Java из XSD
- Сгенерировать XSD из классов Java
Существуют также более простые библиотеки сериализации XML, такие как XStream, Digester или XMLBeans, которые могут быть альтернативными.
Ответ 6
JAXB отлично работает, если вам нужно кодировать некоторую внешнюю спецификацию XML, определенную как XML-схема (xsd
).
Например, у вас есть торговое приложение, и вы должны сообщать о сделках в Uber Lame Trade Reporting App, и они дали вам ultra.xsd
для продолжения. Используйте компилятор $JAVA_HOME/bin/xjc
, чтобы превратить XML в кучу классов Java (например, UltraTrade
).
Затем вы можете просто написать простой слой адаптера, чтобы преобразовать ваши торговые объекты в UltraTrades
и использовать JAXB
для переноса данных на Ultra-Corp. Много легче, чем возиться с конвертированием ваших сделок в их формат XML.
Где все ломается, когда Ultra-Corp фактически не подчиняется их собственной спецификации, а торговля price
, которую они имеют как xsd:float
, должна быть фактически выражена как double
!
Ответ 7
Зачем нам нужен JAXB? Удаленные компоненты (написанные на Java) веб-служб используют XML как средство обмена сообщениями между собой. Почему XML?. Поскольку XML считается облегченным вариантом обмена сообщениями в сетях с ограниченными ресурсами. Поэтому нам часто нужно преобразовать эти XML-документы в объекты и наоборот. Например: простой Java POJO Employee может использоваться для отправки данных Employee удаленному компоненту (также программе Java).
class Employee{
String name;
String dept;
....
}
Это Pojo должно быть преобразовано (Marshall) в XML-документ следующим образом:
<Employee>
<Name>...</Name>
<Department>...</Department>
</Employee>
И на удаленном компоненте вернитесь к объекту Java из документа XML (Un-Marshall).
Что такое JAXB?
JAXB - это библиотека или инструмент для выполнения этой операции Marshalling и UnMarshalling. Это избавляет вас от этой головной боли, так просто.
Ответ 8
Вы также можете проверить JIBX. Это также очень хорошее связывание данных xml, которое также специализируется на OTA (Open Travel Alliance) и поддерживается серверами AXIS2. Если вы ищете производительность и совместимость, вы можете проверить это:
Ответ 9
JAXB обеспечивает улучшенную производительность с помощью оптимизаций сортировки по умолчанию. JAXB определяет API-программиста для чтения и записи объектов Java в XML-документы и из них, что упрощает чтение и запись XML через Java.