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

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

XML-представление типа CreditCard также изменится, как вы можете видеть в листинге 12.13 (по сравнению с приведенным ранее (см. листинг 12.8)).


Листинг 12.13. XML-документ, представляющий пользовательский объект CreditCard

>

>

>··12/09

>··Visa

>·· 6398

>

В табл. 12.8 перечислены основные аннотации JAXB. Некоторые из них могут аннотировать атрибуты (или методы получения значений свойств), другие классы, а некоторые — использоваться для всего пакета (например, @XmlSchema).


Таблица 12.8. Аннотации JAXB
АннотацияОписание
@XmlAccessorTypeУправляет необходимостью преобразования атрибутов или геттеров (FIELD, NONE, PROPERTY, PUBLIC_MEMBER)
@XmlAttributeПреобразует атрибут или геттер к XML-атрибуту примитивного типа (String, Boolean, Integer и т. д.)
@XmlElementПреобразует нестатический атрибут или геттер без модификатора transient в XML-элемент
@XmlElementsДействует как контейнер для нескольких аннотаций @XmlElement
@XmlEnumПреобразует перечисление к представлению XML
@XmlEnumValueИдентифицирует константу-перечисление
@XmlIDИдентифицирует ключевое поле элемента XML (или типа String), которое может быть использовано для ссылки на элемент с использованием аннотации @XmlIDREF (концепции XML Schema ID и IDREF)
@XmlIDREFПреобразует свойство в схеме в XML IDREF
@XMLListПреобразует свойство в список
@XmlMimeTypeИдентифицирует текстовое представление типа MIME
@XmlnsИдентифицирует пространство имен XML
@XmlRootElementПредставляет аннотацию, необходимую любому классу для связывания в качестве корневого элемента XML
@XmlSchemaПреобразует имя пакета в пространство имен XML
@XmlTransientИнформирует JXB, что не нужно связывать атрибут (аналогичен ключевому слову transient в Java или аннотации @Transient в JPA)
@XmlTypeАннотирует класс как комплексный тип в схеме XML
@XMLValueПозволяет преобразовать класс в простое содержимое или тип схемы

При использовании этих аннотаций можно преобразовать данные объекты в конкретные XML-схемы. Иногда вам нужна такая гибкость для работы со старыми веб-службами, как вы увидите в следующих главах. Ссылаясь на JPA, когда необходимо преобразовать сущности в ранее созданную базу данных, существует набор аннотаций, который позволяет удовлетворить потребности настройки отображения любого фрагмента таблицы (столбцы, таблицы, внешние ключи и т. д.). Для веб-служб принцип схожий: они описаны в файле WSDL, который указан в XML. Если служба устарела, ее файл WSDL нельзя изменить. Вместо этого следует использовать механизм преобразования его в объекты, именно поэтому JAXB часто применяется при работе с веб-службами.


Примечание

В этом разделе я упоминал JPA несколько раз, потому что технологии JPA и JAXB в значительной степени полагаются на аннотации и используются для преобразования объектов в форму, пригодную для различных источников (базы данных или XML). С точки зрения архитектуры сущности должны использоваться только для преобразования данных в форму для базы данных, а JAXB классы — для преобразования данных в XML. Однако иногда вам может понадобиться иметь оба представления. Как вы увидите в главе 14, один класс можно аннотировать и @Entity, и @XmlRootElement.

Основные сведения о JSON

Нотация объектов JavaScript (JSON) представляет собой легкий формат обмена данными, то есть менее подробный и более удобочитаемый, чем XML. Он часто используется для сериализации и передачи структурированных данных через сетевое соединение между сервером и веб-приложением.

В качестве альтернативы XML JSON непосредственно используется в коде JavaScript на веб-страницах. Это основная причина прибегать к JSON, а не к другому представлению данных. В листинге 12.14 показано JSON-представление документа XML, содержащего информацию о заказе и приведенного раннее (см. листинг 12.1).


Листинг 12.14. Представление информации о заказе в формате JSON

>{

>··"order": {

>····"id": "1234",

>····"date": "05/06/2013",

>····"customer": {

>······"first_name": "Джеймс",

>······"last_name": "Роррисон",

>······"email": "j.rorri@me.com",

>······"phoneNumber": "+44 1234 1234"

>····},

>····"content": {

>······"order_line": [

>········{

>··········"item": "H2G2",

>··········"quantity": "1",

>··········"unit_price": "23.5"

>········},

>········{

>··········"item": "Гарри Поттер",

>··········"quantity": "2",

>··········"unit_price": "34.99"

>········}

>······]

>····},

>····"credit_card": {

>······"number": "1357",

>······"expiry_date": "10/13",

>······"control_number": "234",

>······"type": "Visa"

>····}

>··}

>}

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

Документы JSON. JSON является текстовым, независимым от языка форматом, который использует набор соглашений для представления простых структур данных. Многие языки реализовали API для анализа документов JSON. Структуры данных в JSON просты для человеческого понимания и очень похожи на структуры данных в Java. JSON может представлять четыре примитивных типа (число, строка, двоичное значение и null) и два структурированных (объекты и массивы). В табл. 12.9 перечислены соглашения JSON для представления данных.


Рекомендуем почитать
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 так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.