Изучаем Java EE 7 - [190]

Шрифт
Интервал


Листинг 12.7. Класс CreditCard с аннотацией JAXB

>@XmlRootElement

>public class CreditCard {


>···private String number;

>···private String expiryDate;

>···private Integer controlNumber;

>···private String type;


>···// Конструкторы, методы работы со свойствами

>}

За исключением аннотации @XmlRootElement выше приведен код простого класса Java. С этим механизмом аннотаций и маршалинга JAXB способен создать XML-представление объекта типа CreditCard, которое выглядит как XML-документ, показанный в листинге 12.8.


Листинг 12.8. XML-документ, представляющий данные кредитных карт

>

>

>··566

>··10/14

>··123 45678

>··Visa

>

Маршалинг — это процесс преобразования объекта в XML (рис. 12.2). Обратное преобразование также возможно с помощью JAXB. При демаршалинге в качестве входных данных был бы принят XML-документ из листинга 12.8 и создан экземпляр типа CreditCard со значениями, определенными в документе.

JAXB управляет XML-документами и определениями XML-схем (XSD) прозрачным, объектно-ориентированным способом, что скрывает сложность языка XSD. JAXB может автоматически сгенерировать схему, которая проверила бы XML-структуру кредитной карты, чтобы убедиться, что она имеет правильную структуру и типы данных (благодаря утилите schemagen, поставляющейся с JDK). В листинге 12.9 показана XML-схема (XSD) класса CreditCard.


Рис. 12.2. Архитектура JAXB


Листинг 12.9. XML-схема для проверки предыдущего документа

>

>

>··

>··

>····

>······

>······

>······

>······

>····

>··

>

Схема, приведенная выше, состоит из простых элементов (controlNumber, ExpiryDate и т. д.) и сложного типа (creditCard). Обратите внимание, что все метки используют префикс xs (xs: element, хs: string и т. д.). Он называется пространством имен и определяется в заголовочном теге документа xmlns (пространство имен XML):

>

Пространства имен создают уникальные префиксы для элементов в виде отдельных документов или приложений, которые используются вместе. В основном они применяются, чтобы избежать конфликтов, которые могут возникнуть, если одинаковое имя элемента появляется в нескольких документах (например, тег может встречаться в нескольких документах и иметь разные значения).

JAXB обеспечивает легкое двустороннее преобразование между объектами Java и XML-структурами. Это позволяет трансформировать объекты Java в XML-данные без необходимости создания сложного кода, который трудно поддерживать и отлаживать. Например, JAXB позволяет легко переносить состояние объекта в XML-данные или сериализовать его сетевой поток. С другой стороны, JAXB позволяет работать с XML-документами, как будто они являются объектами Java без необходимости явно выполнять анализ SAX или DOM в коде приложения.

Связывание

JAXB API, определенный в пакете javax.xml.bind, предоставляет набор интерфейсов и классов для создания XML-документов и генерации классов Java. Другими словами, он связывает две модели. Фреймворк среды выполнения JAXB реализует операции маршалинга и демаршалинга. В табл. 12.7 перечислены основные используемые для них пакеты JAXB.


Таблица 12.7. Пакеты JAXB
ПакетОписание
javax.xml.bindФреймворк связывания среды выполнения, имеющий возможность выполнять операции маршалинга, демаршалинга и проверки
javax.xml.bind.annotationАннотации для настройки преобразований между программой Java и XML-данными
javax.xml.bind.annotation.adaptersКлассы-адаптеры JAXB
javax.xml.bind.attachmentПозволяет выполнять маршалинг для оптимизации хранения двоичных данных и демаршалинг корня документа, содержащего форматы двоичных данных
javax.xml.bind.helpersСодержит частичные стандартные реализации некоторых интерфейсов javax.xml.binding
javax.xml.bind.utilПредоставляет полезные вспомогательные классы

Как было показано выше (см. рис. 12.2), маршалинг — это процесс преобразования экземпляров аннотированных с помощью JAXB-классов в XML-представления. Кроме того, демаршалинг — это процесс преобразования XML-представлений в дерево объектов. В процессе маршалинга/демаршалинга JAXB также может проверить XML на соответствие схеме XSD (см. листинг 12.9). JAXB может также работать на уровне классов и способен автоматически генерировать схемы из набора классов и наоборот.

В центре JAXB API находится класс javax.xml.bind.JAXBContext. Этот абстрактный класс управляет связыванием между XML-документами и объектами Java, поскольку он предоставляет:


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.