JAXB - это стандартный и лучший подход для покрытия объектов Java в XML.Есть несколько реализаций с открытым исходным кодом:
Для более информация о JAXB проверить мой блог:
UPDATE:
Что такое лучший подход?
Это в конечном счете, зависит от того, что вы пытаетесь сделать, я объясню ниже:
Use Case # 1 - Запуск из XML-схемы
В этом случае использования вы имеете в XML схемы, и вы хотите создать Java-модель. Не многие из упомянутых в этом потоке инструментов поддерживают этот вариант использования. XStream for example recommends XMLBeans for this.
Номинанты:
- JAXB (все реализации) - Формирует POJO, с JAXB аннотации.
- XMLBeans - генерирует собственные классы, которые включают логику привязки XML.
Use Case # 2 - Начиная с Java классов (которые можно редактировать)
В случае использования у вас есть гораздо больше выбора (только XMLBeans исключается). Обычно редактирование включает добавление аннотаций для управления отображением.
Номинанты:
Use Case # 3 - Запуск формы классов Java (которые вы можете не редактировать)
В случае использования вы не есть источник для изменения классов модели. Это требует, чтобы метаданные предоставлялись извне либо с XML-файлом по коду.
Номинанты:
- EclipseLink JAXB (Moxy) - предлагает external binding file, и метаданные могут быть применены программно.
- Metro JAXB - Можно использовать Annox или JAXBIntroductions
- Кастор - предлагает внешний связывающую файл
- JiBX - предлагает внешний связыванию файл
- XStream - Метаданные могут быть применены программно
Use Case # 4 - Встреча в среднем (существующие классы и схема)
В этом случае у вас есть существующие классы, которые вам нужны ap к существующей схеме XML. EclipseLink Moxy с его XPath based mapping является единственным инструментом, я знаю, что могу справиться с этим вариантом использования
Номинанты:
Use Case # 5 - XML Infoset Preservation:
В этом случае вам необходимо сохранить немаркированный контент: комментарии, инструкции по обработке и т. Д.
Номинанты:
- JAXB (все реализации) - Имеет функцию Binder.
- XMLBeans - Сгенерированная объектная модель хранит весь XML-информационный файл.
Use Case # 6 - Совместимость с JPA
JPA является стандартом Java для Java настойчивостью. JPA имеет много концепций: составные клавиши, двунаправленные отношения, ленивую загрузку и т. Д., Которые могут быть трудными для использования с решением привязки XML. Например, любой инструмент XML, который взаимодействует только с объектами через поле, обычно имеет проблемы с ленивыми свойствами загрузки.
Номинанты:
Use Case # 7 - Совместимость с XML Web Services (JAX-WS)
JAXB является обязательным слой по умолчанию для JAX-WS.
Номинанты:
- JAXB (реализация зависит от поставщика JAX-WS)
Use Case # 8 - Совместимость с RESTful Web Services (JAX-RS)
JAX-RS предлагает легкую альтернативу JAX-WS на основе протокола HTTP.Выполните следующие действия для example.
Номинанты:
- JAXB (все реализации) - Уровень привязки по умолчанию и простой в использовании с JAX-RS.
- Все остальное. Вы можете использовать концепции MessageBodyReader/Writer для использования других инструментов XML.
Use Case # 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).
Раньше я использовал XStream. Это было относительно не мучительно и гибко - но гибкость исходит из возможности расширения/добавления разные посетители в самом коде и некоторые фанки XML/XSD или DSL. – 2010-11-20 05:41:24
Итак, как 'XStream' складывается с' JAXB'? – Rachel
Вот мое сравнение JAXB и XStream: http://bdoughan.blogspot.com/2010 /10/how-does-jaxb-compare-to-xstream.html, как я уже ранее признал, что я выполняю реализацию JAXB, но считаю, что сравнение справедливое. Я сделал аналогичное сравнение между JAXB и Simple XML и Simple XML сайт добавляет его в свой раздел статей. –