Что такое JAXB и почему я должен его использовать? - программирование
Подтвердить что ты не робот

Что такое JAXB и почему я должен его использовать?

Есть парень, который ругается, что JAXB - самая большая вещь, поскольку нарезанный хлеб. Мне любопытно узнать, что пользователи Qaru считают, что использование используется для JAXB, и что делает его хорошим или плохим решением для этого случая.

4b9b3361

Ответ 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. Если вы ищете производительность и совместимость, вы можете проверить это:

http://jibx.sourceforge.net/index.html

Ответ 9

JAXB обеспечивает улучшенную производительность с помощью оптимизаций сортировки по умолчанию. JAXB определяет API-программиста для чтения и записи объектов Java в XML-документы и из них, что упрощает чтение и запись XML через Java.