Ответ 1
JAXB - это стандартный и лучший подход для покрытия объектов Java в XML. Доступно несколько версий с открытым исходным кодом:
- EclipseLink MOXy (я технический лидер)
- Metro (эталонная реализация, включенная в Java SE 6)
- JaxMe
Для получения дополнительной информации о JAXB проверьте мой блог:
UPDATE:
Что такое ЛУЧШИЙ подход?
В конечном итоге это зависит от того, что вы пытаетесь сделать, я объясню ниже:
Использовать пример # 1 - Начиная с XML-схемы
В этом случае у вас есть XML-схема, и вы хотите сгенерировать модель Java. Не многие из упомянутых в этом потоке инструментов поддерживают этот вариант использования. XStream рекомендует XMLBeans для этого.
Номинанты:
- JAXB (все реализации) - генерирует POJO с аннотациями JAXB.
- XMLBeans - генерирует собственные классы, которые включают логику привязки XML.
Использовать пример # 2 - Начиная с классов Java (которые вы можете редактировать)
В этом случае у вас гораздо больше выбора (исключается только XMLBeans). Обычно редактирование включает добавление аннотаций для управления отображением.
Номинанты:
- Все, кроме XMLBeans
Использовать пример # 3 - Запуск формы Java-классы (которые вы не можете редактировать)
В этом случае у вас нет источника для изменения классов модели. Это требует, чтобы метаданные предоставлялись извне либо с XML файлом по коду.
Номинанты:
- EclipseLink JAXB (MOXy) - предлагает внешний > внешний файл привязки, а метаданные могут применяться программно.
- Metro JAXB - Может использовать Annox или JAXBIntroductions.
- Castor - предлагает внешний файл привязки
- JiBX - предлагает внешний файл привязки
- XStream - метаданные могут применяться программно
Пример использования # 4 - Встреча в среднем (существующие классы и схема)
В этом случае у вас есть существующие классы, которые вам нужно сопоставить с существующей схемой XML. EclipseLink MOXy с Отображение на основе XPath - единственный инструмент, который я знаю, который может обрабатывать этот прецедент
Номинанты:
- EclipseLink JAXB (MOXy)
Использовать пример # 5 - Сохранение XML-информации:
В этом случае вам необходимо сохранить немаркированный контент: комментарии, инструкции по обработке и т.д.
Номинанты:
- JAXB (все реализации). Имеет функцию Binder.
- XMLBeans. Сгенерированная объектная модель хранит весь XML файл.
Пример использования # 6 - Совместимость с JPA
JPA - стандарт Java для сохранения Java. JPA имеет много концепций: составные клавиши, двунаправленные отношения, ленивую загрузку и т.д., Которые могут быть трудными для использования с решением привязки XML. Например, любой инструмент XML, который взаимодействует только с объектами через поле, обычно имеет проблемы с ленивыми свойствами загрузки.
Номинанты:
- EclipseLink JAXB (MOXy) - был построен с учетом JPA.
Использовать пример # 7 - Совместимость с веб-службами XML (JAX-WS)
JAXB является стандартным связующим слоем для JAX-WS.
Номинанты:
- JAXB (реализация зависит от поставщика JAX-WS)
Использовать пример # 8 - Совместимость с веб-службами RESTful (JAX-RS)
JAX-RS предлагает легкую альтернативу JAX-WS на основе протокола HTTP. Выполните следующие действия для .
Номинанты:
- JAXB (все реализации) - Уровень привязки по умолчанию и самый простой в использовании с JAX-RS.
- Все остальное. Вы можете использовать концепции MessageBodyReader/Writer для использования других инструментов XML.
Случай использования # 9 - Совместимость с Spring
Spring имеет встроенную поддержку интеграции с инструментами привязки XML. Для получения дополнительной информации ознакомьтесь со следующей ссылкой:
Номинанты:
- JAXB (все реализации)
- Касторовое
- XMLBeans
- JiBX
Другие вещи, которые следует учитывать
- Является ли инструмент все еще разрабатываемым/поддерживаемым? Как ни забавно, как это звучит, я видел, как люди рекомендуют инструменты, которые не были обновлены через 5 лет. Некоторые из упомянутых здесь инструментов не были выпущены через 2 года.
Мой выбор для BEST-подхода? - JAXB
Если посмотреть на приведенные выше категории, JAXB может не всегда быть подходящим для конкретного случая использования (но он всегда хорошо подходит), но это единственная библиотека, которая может использоваться для всех случаев использования. Это означает, что он всегда может выполнять эту работу. Альтернативой является использование разных библиотек для разных задач, предоставляющих несколько библиотек для поддержки.
Я действительно выполняю реализацию JAXB EclipseLink MOXy, но MOXy начал свою жизнь как собственная библиотека привязки XML TopLink OXM. TopLink всегда понимал преимущества стандартов (т.е. EJB/JPA), и мы реализовали JAXB 1. Затем мы (я являюсь репрезентативным) стали активными членами JAXB 2 (JSR-222).