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


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

9 97

9 ответов:

Я большой поклонник JAXB для манипулирования XML. В принципе, он обеспечивает решение этой проблемы (я предполагаю знакомство с XML, структурами данных Java и схемами XML):

работать с XML сложно. Нужен способ взять XML-файл, который в основном является текстовым файлом, и преобразовать его в какую-то структуру данных, которую ваша программа может затем манипулировать.

JAXB будет принимать XML-схему, которую вы пишете и создаете набор классов, которые соответствуют это схема. Утилиты JAXB создадут иерархию структур данных для управления этим XML.

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

Мне нравится JAXB, потому что он прост в использовании и поставляется с Java 1.6 (если вы используете 1.5, вы можете скачать JAXB .банки.) То, как он создает иерархия классов интуитивно понятна, и по моему опыту, делает приличную работу, абстрагируя "XML", чтобы я мог сосредоточиться на "данных".

поэтому, чтобы ответить на ваш вопрос: я ожидал бы, что для небольших XML-файлов JAXB может быть излишним. Это требует, чтобы вы создали и поддерживали схему XML, а также использовали "стандартные методы учебника" использования классов Java для структур данных. (Основные классы, небольшие внутренние классы для представления "узлов" и огромная иерархия из них.) Итак, JAXB, вероятно, не так отлично подходит для простого линейного списка "предпочтений" для приложения.

но если у вас есть довольно сложная схема XML, и много данных, содержащихся в нем, то JAXB является фантастическим. В моем проекте я преобразовывал большие объемы данных между двоичными (которые потреблялись программой на C) и XML (чтобы люди могли потреблять и изменять эти данные). Полученная XML-схема была нетривиальной (много уровней иерархии, некоторые поля могут быть повторены, другие не могут), поэтому JAXB был полезен в будучи в состоянии манипулировать этим.

вот причина, чтобы не использовать его: производительность страдает. Существует много накладных расходов при маршалинг и unmarshaling. Вы также можете рассмотреть другой 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-схема (xsd).

например, у вас есть торговое приложение, и вы должны сообщить о сделках в Uber Lame Trade Reporting App и они дали тебе ultra.xsd для начала. Используйте $JAVA_HOME/bin/xjc компилятор, чтобы превратить XML в кучу классов Java (например,UltraTrade).

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

где все это ломается, когда Ultra-Corp фактически не повиновались своей собственной спецификации, а торговля price что они как xsd:float на самом деле должно быть выражено как double!

с помощью JAXB вы можете автоматически создавать XML-представления ваших объектов (маршалинг) и объектные представления XML (unmarshalling).

Что касается XML-схемы, у вас есть два варианта:

  • генерировать классы Java из XSD
  • сгенерируйте XSD из ваших классов Java

есть также некоторые более простые библиотеки сериализации XML, такие как XStream,метантенка или XMLBeans это может быть альтернативой.

зачем нам нужен JAXB? Удаленные компоненты (написанные на Java) веб-служб используют XML в качестве средства обмена сообщениями между собой. почему XML? потому что XML считается легким вариантом обмена сообщениями в сетях с ограниченными ресурсами. Поэтому часто нам нужно конвертировать эти XML-документы в объекты и наоборот. Например: простой Java POJO сотрудник может быть использован для отправки данных сотрудника в удаленный компонент( также Java программа.)

class Employee{
 String name;
 String dept;
 ....
}

этот Pojo должен быть преобразован (Marshall) в XML-документ следующим образом:

<Employee>
  <Name>...</Name>
  <Department>...</Department>
</Employee>

и на удаленном компоненте, обратно к объекту Java из XML-документа (Un-Marshall).

что такое JAXB?

JAXB-это библиотека или инструмент для выполнения этой операции маршалинга и Демаршалинга. Это избавляет вас от этой головной боли, просто.

вы также можете проверить JIBX тоже. Это также очень хороший связыватель данных xml, который также специализируется на OTA (Open Travel Alliance) и поддерживается серверами AXIS2. Если вы ищете производительность и совместимость, вы можете проверить это :

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

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