Тут хлопець клянеться, що 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 є фантастичним. У своєму проекті я перетворював великі обсяги даних між бінарними (які споживалися програмою С) та 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-схема ( 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
!
Навіщо нам потрібен 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 - це бібліотека або інструмент для виконання цієї операції Marshalling і UnMarshalling. Це позбавить вас від цього головного болю, такого простого.
Ви також можете перевірити JIBX. Це також дуже гарне сполучення даних у форматі XML, яке також спеціалізується на OTA (Open Travel Alliance) та підтримується серверами AXIS2. Якщо ви шукаєте продуктивність та сумісність, ви можете перевірити це:
JAXB забезпечує покращену продуктивність завдяки оптимізаціям за замовчуванням. JAXB визначає API програміста для читання та запису Java-об'єктів до та з XML-документів, тим самим спрощуючи читання та запис XML через Java.