Подтвердить что ты не робот

Преобразования Java в XML?

Каковы разные подходы к преобразованию Java Objects в XML, я знаю, что один параметр - JAXB, но хотел бы знать, какие другие approaches/tools доступны для одного и того же?

Примечание. У меня нет дополнительных требований, поэтому я не могу добавить еще вопрос meat к вопросу, но в этот момент было бы действительно здорово, если бы я мог понять, доступны подходы для преобразования Java to XML?

Обновление: Различные предлагаемые подходы:

Теперь среди всех предложенных подходов подход BEST для преобразования Java Objects to XML и XML to Java Objects?

4b9b3361

Ответ 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, который взаимодействует только с объектами через поле, обычно имеет проблемы с ленивыми свойствами загрузки.

Номинанты:

Использовать пример # 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).

Ответ 2

Вы всегда можете сделать это самостоятельно с интерфейсами javax.xml.bind.Marshaller и javax.xml.bind.Unmarshaller.

Это не так безумно, как кажется. Это не так сложно сделать, и у вас будет полный контроль и знание того, что сделано.

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

Я использовал XStream в прошлом и мне понравилось, но когда я его использовал, мне не пришлось беспокоиться о пространствах имен XML. Мне сказали, что XStream не справляется с ними хорошо.

Ответ 3

Некоторые альтернативы включают: -

Однако одно существенное преимущество перехода с JAXB заключается в том, что он поставляется с распределением Java.

Ответ 4

Я знаю, что это не то, что вы просили, но вы считали JSON вместо XML? В настоящее время я работаю над проектом, который сильно использует JSON (с Jackson), и я очень доволен этим. Джексон работает аналогично JAXB - он даже работает с аннотациями JAXB, если вы хотите использовать оба.

XMLBeans также стоит посмотреть.

Ответ 5

Простая XML-сериализация (simpleframework.org)

Другим подходом является Simple его гораздо проще в использовании, чем JAXB, JiBX или другие подобные инструменты. Вы просто комментируете класс, и вы можете сериализовать любые POJO для XML. Кроме того, это, вероятно, единственная структура, которая в настоящее время работает на всех известных платформах Java, включая Android, Google App Engine, любой JDK 1.5+. Для получения дополнительной информации вы можете проверить Tutorial

Ответ 6

Есть также:

  • java.beans.XMLEncoder/-Decoder
  • javax.xml.stream.XMLStreamWriter

Но я рекомендую использовать JAXB, если у вас нет веских оснований для этого.

Ответ 7

Вы можете посмотреть castor и jibx.

Ответ 8

Apache Digester является опцией. Вот tutorial для него. Если формат JSON приемлем, вы можете использовать google-gson.

Ответ 9

Castor позволяет генерировать классы Java (достойные реализации) прямо из схемы XSD (пример использования № 1 выше). Просто убедитесь, что в Android 2.1 не использовать SAXParser по умолчанию. Вы получите ошибки пространства имен. Вы делаете это, определяя синтаксический анализатор, например, Xerces (и добавляете необходимые JARS) в core.properties. В android 2.2 это может быть нормально. Обратите внимание, что если вы создаете xmlcontext для unmarsheler с помощью xerces, он все равно не будет работать, так как само отображение будет обрабатываться с помощью saroid SAX. Это должно быть сделано в core (файл свойств верхнего уровня), так что даже сопоставление анализируется с помощью xerces. наконец - производительность настолько медленная, насколько вы можете ожидать...:( Удачи SM