17 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Пример работы с JAXB. Сохраняем Java объект в XML, восстанавливаем объект из XML

dev64

Programming

Практический пример использования XML schema и JAXB

Галерея

Однажды в очередной раз возникла необходимость реализации очередного XML вебсервиса в очередном проекте. Я решил использовать эту задачу для тестирования описаний XML schema, сделанных ранее.

После написания данного поста, позже сделал ещё ряд постов о JAXB. Получилась небольшая серия.

Оглавление

Введение

Допустим, мне нужно реализовать Web Service для работы с книгами. В зависимости от типа запроса, сервис может возвращать различные варианты ответов.

В документе result обязательный элемент code, содержащий код успеха операции OK или NOK.
Элемент description необязательный, он содержит словесное описание ошибки, если таковая случилась.
Остальные элементы тоже необязательные. Это либо элемент book — книга, с описанием книги. Либо элемент books — список книг

Примеры XML

Результат содержит bookId

Ошибочный результат

Результат содержит данные о книге

Результат содержит данные список книг

Мне нужно реализовать работу с вышеприведенными XML с использованием JAXB. Задача состоит в том, чтобы JAXB автоматически преобразовывал XML в Java объекты и обратно и сообщал при этом об ошибках, если таковые присутствуют в XML документе. Т.е. документ должен валидироваться на соответствие XML схеме.

Работа с JAXB в целом делается так.

  • Для XML пишется XML схема в виде xsd файла
  • Используя утилиту xjc из стандартной поставки Java JDK генерируете из схемы набор классов.
  • Классы включаются в программу. JAXB marshaller используется для генерации XML из объектов, unmarshaller — для получения объектов из XML

Я для описанного сервиса написал нижеприведенную схему. Опускаю промежуточные неудачные варианты. Просто упомяну тонкие моменты. См. под примером схемы.

В схеме обязательно должно присутствовать ключевое слово elementFormDefault=»qualified». Ещё один тонкий момент — обязательно при описании типов использовать в них явно указанный namespace и ссылаться на него: )
public String getName() <
return name;
>

Мы можем изменить имя элемента по умолчанию на заголовок.

BookStore — это класс, который содержит список, в который мы помещаем наши объекты книги.

@XmlRootElement(namespace = “com.zetcode”)
public class BookStore <
Мы определяем корневой элемент с помощью аннотации @XmlRootElement.

// XmLElementWrapper генерирует элемент-оболочку вокруг представления XML
@XmlElementWrapper(name = “bookList”)
// XmlElement устанавливает имя
@XmlElement(name = “book”)
private ArrayList bookList;

Аннотация @XmlElementWrapper определяет элемент-обертку вокруг элементов книги. Аннотация @XmlElement определяет имя элемента XML, который находится внутри оболочки.

Читать еще:  О мобильной платформе 1С: Предприятия

Пример чтения XML JAXB (unmarshal)

Во втором примере мы считываем данные обратно в объекты Java.

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим – напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

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

JSON — это аббревиатура для Javascript Object Notation, которая представляет собой форму данных, которая следует определенному правилу, согласно которому большинство языков программирования в настоящее время доступны для чтения. Мы можем легко сохранить его в файл или запись в базе данных. Формат JSON использует пары ключ-значение для описания данных.

В следующем примере мы определяем строку JSON, в которой хранится личная информация:

Так что синтаксис JSON очень прост. Каждая информация о данных будет состоять из двух частей: ключа и значения, которые соответствуют имени поля и его значению в определенной записи. Но, если посмотреть дальше, есть несколько таких вещей:

  • Строка JSON заключена в фигурные скобки <>.
  • Ключи и значения JSON должны быть заключены в кавычки <«>.
  • Если данных больше (больше пар ключ => значение), мы используем запятые (,) для разделения.
  • Ключи JSON должны быть беззнаковыми буквами или цифрами _, без пробелов, первый символ не должен быть установлен на цифры.

Что такое XML?

XML означает расширяемый язык разметки, также называемый расширяемым языком разметки, предложенный Консорциумом World Wide Web (http://www.w3.org/) для создания других языков разметки. Это простое подмножество, которое может описывать множество различных типов данных, поэтому оно очень полезно для обмена данными между системами.

Теги в XML часто не предопределены, но они создаются в соответствии с пользовательскими соглашениями. XML вводит новые функции, основанные на преимуществах HTML.

В различных системах и решениях есть еще несколько полезных функций создания XML:

  • XML расширяем: XML позволяет создавать собственные теги в соответствии с вашим приложением.
  • XML переносит данные, а не отображает их: XML позволяет хранить данные независимо от того, как они будут отображаться.
  • XML является общим стандартом: XML был разработан Консорциумом World Wide Web (W3C) и доступен в качестве открытого стандарта.

XML построен на структуре вложенных узлов. Каждый узел будет иметь открывающий тег и закрывающий тег следующим образом:

  • — это открытый тег, имя этого тега определяется вами.
  • — закрытый тег, имя этого тега должно совпадать с именем открытого тега.
  • content — это содержимое этого тега.

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

Что такое gson?

Gson (https://github.com/google/gson) — это библиотека java, которая позволяет пользователям преобразовывать объекты Java в строку JSON, а также преобразовывать строки JSON в объекты Java. Gson может работать с произвольными объектами Java, включая существующие объекты, без исходного кода.

Начиная с версии 1.6, Gson представляет два новых класса — JsonReader и JsonWriter для обеспечения потоковой обработки данных JSON.

  • JsonWriter — потоковая запись в JSON. Синтаксис для общей реализации следующий. Мы создаем объект JsonWriter. Чтобы начать и закончить создание строки JSON, мы используем функции beginObject() и endObject(). В середине выполнения этих двух функций мы выполняем запись данных парами (ключ => значение).
  • JsonReader — потоковое чтение из JSON. Синтаксис для общей реализации следующий. Мы создаем объект JsonReader. Чтобы начать и закончить создание строки JSON, мы используем функции beginObject() и endObject(). В середине выполнения этих двух функций мы выполняем чтение данных с парами (ключ => значение).

Gson Streaming обрабатывает быстро. Однако вам нужно обрабатывать каждую пару (ключ => значение) обработки данных JSON.

Что такое JAXB?

JAXB расшифровывается как Java Architecture for XML Binding, библиотека, которая использует аннотации для преобразования объектов Java в контент XML и наоборот. Поскольку JAXB определяется через спецификацию, мы можем использовать разные реализации для этого стандарта.

С JAXB мы часто используем следующие основные аннотации, а именно:

  • @XmlRootElement: эта аннотация определяет внешний тег XML-файла и, следовательно, он объявляется поверх класса.
  • @XmlElementWrapper: эта аннотация создает XML-элемент оболочки вокруг коллекций.
  • @XmlElement: эта аннотация используется для объявления атрибута объекта тегом XML-файла.
  • @XmlAttribute: эта аннотация, также используемая для объявления атрибута объекта, является тегом файла XML.

Синтаксис для общей реализации следующий. Сначала мы инициализируем объект JAXBContext с объектом MyObject для преобразования.

В этом объекте JAXBContext у него есть метод для создания объекта, который преобразует содержимое XML в объект Java, Unmarshaller.

В этом объекте JAXBContext у него есть метод для создания объекта, который преобразует объект Java в контент XML, который является Marshaller.

Начальная настройка

Мы реализуем пример преобразования XML — JSON на платформу:

  • Откройте JDK 8 для Ubuntu 18.04 x64.
  • Eclipse IDE 2019-03 (4.11.0) x64 Разработка Java для Ubuntu.
  • JSON 2.8.5.

Шаг 1. Создайте новый проект Java.

Шаг 2. Установите имя проекта-XmlToJsonExample.

Шаг 3. Создайте папку data/input, содержащую два файла sample.xml and sample.json.

Давайте сначала определим наш XML с отделом, ролью и личными свойствами.

Общая архитектура такова: ; .

Во-вторых, мы определяем JSON, имея ту же идею:

Шаг 4. Определите соответствующие классы объектов в модели пакета.

Шаг 5. Настройка библиотеки Gson 2.8.5.

Преобразование XML в объекты Java с использованием JAXB

Во-первых, мы определяем выполнение, классифицируемое в пакетной службе.

На первом этапе первого процесса мы используем технику Un-marshalling из JAXB.

Un-marshalling предоставляет клиентскому приложению возможность преобразовывать данные XML в объекты Java, полученные из JAXB.

Мы определяем функцию getObjectFromXmlFile, чтобы разархивировать наш XML-файл обратно в объект Java. Эта функция определена в классе XMLService.

Мы вызываем код выше в классе XmlToJsonService.

Тогда мы идем к следующему шагу.

Преобразование объектов Java в сообщение JSON с помощью Gson

На этом этапе мы определяем функцию writeDataToJsonFile для записи данных в файл JSON. Эта функция определена в классе JsonService.

Обратите внимание, что для написания списка строк JSON мы используем функции beginArray() и endArray(). Между этими двумя функциями мы пишем каждую строку JSON.

Мы вызываем приведенный выше код в классе XmlToJsonService.

Это первый процесс.

Преобразование сообщения JSON в объекты Java с помощью Gson

На первом шаге второго процесса мы определяем функцию getDataFromJsonFile для чтения данных из файла JSON. Эта функция определена в классе JsonService.

Обратите внимание, что для чтения списка строк JSON мы используем функции beginArray() и endArray(). Между этими двумя функциями мы читаем каждую строку JSON.

Мы вызываем приведенный выше код в классе XmlToJsonService.

Тогда мы идем к следующему шагу.

Преобразование объектов Java в сообщение XML с использованием JAXB

На этом этапе мы используем технику Marshalling из JAXB.

Marshalling предоставляет клиентскому приложению возможность преобразовывать производное JAXB дерево объектов Java в данные XML.

Мы определяем функцию parseObjectToXm для маршаллизации Java-объекта в XML-сообщение. Эта функция определена в классе

Мы вызываем приведенный выше код в классе XmlToJsonService.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: