Содержание

Слайд 2

План лекции Общие принципы Document type definition SAX и DOM Работа

План лекции

Общие принципы
Document type definition
SAX и DOM
Работа с SAX и DOM

в Java
Запись XML в Java
XML-сериализация в Java
Слайд 3

У истоков Standard Generalized Markup Language (SGML) Предназначался для описания структуры

У истоков

Standard Generalized Markup Language (SGML)
Предназначался для описания структуры сложных документов
Был

разработан в 1970 году
Основные цели:
Все документы должны быть выполнены в строгом соответствии с правилами
Уменьшение количества документации
Слайд 4

Наследники Hypertext Markup Language (HTML) Язык разметки гипертекста (описание представления Web-страницы)

Наследники

Hypertext Markup Language (HTML) Язык разметки гипертекста (описание представления Web-страницы)
Extensible Markup Language

(XML) Язык для описания иерархических данных (портируемое хранение данных) http://www.w3.org/http://www.w3.org/XML/
Слайд 5

Отличия XML от HTML XML чувствителен к регистру В XML нужно

Отличия XML от HTML

XML чувствителен к регистру
В XML нужно закрывать тэги
В

XML часто встречаются тэги, одновременно открывающие и закрывающие
В XML значения атрибутов должны быть заключены в кавычки
В XML все атрибуты должны иметь значения
Слайд 6

Пример XML Helvetica 36 Times Roman 12 400 200 0 50 100 Times Roman Helvetica

Пример XML


<br> <font> <name>Helvetica</name> <size>36</size> </font><br>
Times Roman

12
400 200

0
50
100


Times Roman
Helvetica


Слайд 7

Структура XML-документа Заголовок Объявления типа документа Корневой элемент //DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

Структура XML-документа

Заголовок
Объявления типа документа
Корневой элемент




PUBLIC "-//Sun Microsystems, Inc.
//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">



Слайд 8

Структура XML-документа Смешанное наполнение не рекомендуется Существуют атрибуты Helvetica 36 Helvetica 36

Структура XML-документа

Смешанное наполнение не рекомендуется
Существуют атрибуты


Helvetica
36


Helvetica
36

Слайд 9

Некоторые инструкции Символы Стандартные символы Инструкции обработки Комментарии &#233, &#x2122 &lt; &gt; &amp; &quot; &apos;

Некоторые инструкции

Символы
Стандартные символы
Инструкции обработки
Комментарии

é, ™

< > & " '



Слайд 10

Правильный документ Начинается с объявления Содержит один уникальный корневой элемент Все

Правильный документ

Начинается с объявления
Содержит один уникальный корневой элемент
Все открытые теги закрываются
Учтена

чувствительность к регистру
Теги корректно вложены друг в друга
Значения всех атрибутов заключены в кавычки
Специальные символы задаются с помощью инструкций
Слайд 11

Document Type Definition (DTD) Содержит правила, описывающие структуру документа Транслятор может

Document Type Definition (DTD)

Содержит правила, описывающие структуру документа
Транслятор может автоматически проверять документ

на соответствие этим правилам
Описывает дочерние элементы и атрибуты для каждого элемента
Включение в XML-документ




Слайд 12

Регулярные выражения

Регулярные выражения

Слайд 13

Примеры выражений Описание меню Описание шрифта Описание главы в книге (intro,(heading,(para|image|table|note)+)+)>

Примеры выражений

Описание меню

Описание шрифта


(#PCDATA)>
Описание главы в книге
(intro,(heading,(para|image|table|note)+)+)>
Слайд 14

Описание атрибутов: типы

Описание атрибутов: типы

Слайд 15

Описание атрибутов: значения

Описание атрибутов: значения

Слайд 16

Примеры выражений |SOUTHEAST|SOUTH|SOUTHWEST|WEST|NORTHWEST) "CENTER">

Примеры выражений



(row)*>




|SOUTHEAST|SOUTH|SOUTHWEST|WEST|NORTHWEST)
"CENTER">


Слайд 17

XML Schema Предназначена для того же, что и DTD Для описания

XML Schema

Предназначена для того же, что и DTD
Для описания правил используется

непосредственно XML
Имеет более гибкие возможности, чем DTD
Расширяема
Более гибкие возможности
Есть понятие типа данных
Есть понятие пространства имен
Сложнее в восприятии и программировании средств, ее обрабатывающих
www.w3.org/XML/Schema http://www.w3schools.com/Schema/default.asp
Слайд 18

Поддержка типов данных Проще описывать допустимое содержимое документа Проще проверять корректность

Поддержка типов данных

Проще описывать допустимое содержимое документа
Проще проверять корректность данных
Проще накладывать

ограничения на данные
Проще определять формат данных
Слайд 19

XML Schema описывается на XML Не требуется изучение еще одного языка

XML Schema описывается на XML

Не требуется изучение еще одного языка
Вы можете

использовать свой любимый XML-редактор для работы со схемой
Вы можете работать со схемой программно
Вы можете изменять свою схему с помощью XSLT
Слайд 20

Документ и тип DTD Tove Jani Reminder Don't forget me this weekend!

Документ и тип DTD



Tove
Jani
Reminder
Don't forget me

this weekend!






Слайд 21

XML Schema для документа targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified">

XML Schema для документа


targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">



type="xs:string"/>







Слайд 22

Указание типа документа xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com note.xsd">

Указание типа документа






version="1.0"?>
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">


Слайд 23

Extensible Stylesheet Language (XSL) Комплекс технологий, связанных с преобразованием и представлением

Extensible Stylesheet Language (XSL)

Комплекс технологий, связанных с преобразованием и представлением XML-документов
Обычно

используется для преобразования документов в XML, HTML, текст и PDF (XSL-FO)
XSL Transformations (XSLT) – язык, на котором описываются правила преобразования
XPath – язык, позволяющий формулировать используемые в процессе преобразования выражения, использующие различные фрагменты документа
http://www.w3.org/Style/XSL/ http://www.w3schools.com/xsl/
Слайд 24

XPath Вспомогательный язык, позволяющий обращаться к элементам документа Имя элемента представляется

XPath

Вспомогательный язык, позволяющий обращаться к элементам документа
Имя элемента представляется в виде

пути /bookstore/book/title
Обращение может происходить и к атрибутам
http://www.w3.org/TR/xpath http://www.w3schools.com/Xpath/default.asp
Слайд 25

Примеры выражений XPath

Примеры выражений XPath

Слайд 26

Принципы XSL Контекстно-зависимый язык Основные элементы – выводимый текст и шаблоны

Принципы XSL

Контекстно-зависимый язык
Основные элементы – выводимый текст и шаблоны
Текст просто выводится
Шаблоны

описывают некоторые действия
Могут быть вызваны явно
Могут быть вызваны неявно, по условию совпадения шаблона
Имеются средства управления ходом выполнения
Позволяет создавать и вызывать бибилиотеки с помощью тега
Слайд 27

Пример XML (catalog.xml) Empire Burlesque Bob Dylan USA Columbia 10.90 1985

Пример XML (catalog.xml)





Empire Burlesque

Bob Dylan
USA
Columbia
10.90
1985


Hide your heart
Bonnie Tyler
UK
CBS Records
9.90
1988



Слайд 28

Пример XSL (tranformation.xsl) My CD Collection Title Artist

Пример XSL (tranformation.xsl)






My CD

Collection











Title Artist





Слайд 29

Результат трансформации

Результат трансформации

Слайд 30

Обработка XML Два подхода Simple API for XML (SAX) Порождает события

Обработка XML

Два подхода
Simple API for XML (SAX) Порождает события в процессе чтения

XML документа
Document Object Model (DOM) Представляет XML документ в форме древовидной структуры элементов
Слайд 31

Логика SAX

Логика SAX

Слайд 32

Логика DOM

Логика DOM

Слайд 33

Особенности SAX и DOM

Особенности SAX и DOM

Слайд 34

Работа с XML в Java Стандартные интерфейсы В оригинале описаны на

Работа с XML в Java

Стандартные интерфейсы
В оригинале описаны на Interface Definition

Language (OMG IDL)
Пакет org.w3c.dom
Пакет org.xml.sax
Реализующие классы
Предоставляются отдельно…
JAVA API for XML Processing (JAXP) Пакет javax.xml
Слайд 35

Работа с SAX Обработку документа производит транслятор, передающий информацию зарегистрировавшимся обработчикам

Работа с SAX

Обработку документа производит транслятор, передающий информацию зарегистрировавшимся обработчикам событий
Обработчики

должны реализовывать интерфейсы
org.xml.sax.ContentHandler
org.xml.sax.DTDHandler
org.xml.sax.EntityResolver
org.xml.sax.ErrorHandler
org.xml.sax.Locator
org.xml.sax.ext.DeclHandler
org.xml.sax.ext.EntityResolver2
org.xml.sax.ext.LexicalHandler
org.xml.sax.ext.Locator2
Слайд 36

Пакет javax.xml.parsers Класс SAXParserFactory Образец проектирования Singleton, позволяет настроить и получить

Пакет javax.xml.parsers

Класс SAXParserFactory Образец проектирования Singleton, позволяет настроить и получить экземпляр фабрики

для производства SAXParser
Класс SAXParser Непосредственно транслятор, экземпляры получаются от фабрики SAXParserFactory
Слайд 37

Семантика документа Возникающие события startElement / endElement Открывающий и закрывающий тэг

Семантика документа

Возникающие события
startElement / endElement Открывающий и закрывающий тэг
characters Символы
startDocument / endDocument Начало и

конец документа

Интерфейс ContentHandler
startElement()
endElement()
characters()
startDocument()
endDocument()

Слайд 38

Создание обработчика событий Реализация нужного интерфейса, настройка на него используемого транслятора

Создание обработчика событий

Реализация нужного интерфейса, настройка на него используемого транслятора
Использование класса

org.xml.sax.helpers.DefaultHandler или org.xml.sax.helpers.DefaultHandler2 реализующих все интерфейсы обработки событий (все методы имеют пустые тела)
Слайд 39

Пример. Файл XML Tom King Boss 100500 Ben Gum Bubble 100000

Пример. Файл XML




Tom
King
Boss
100500


Ben
Gum
Bubble
100000


Слайд 40

Пример. Часть 1 import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException;

Пример. Часть 1

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ReadXMLFile {

public static void main(String argv[]) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean bfname = false;
boolean blname = false;
boolean bnname = false;
boolean bsalary = false;
...
Слайд 41

Пример. Часть 2 public void startElement(String uri, String localName, String qName,

Пример. Часть 2

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException {
System.out.println("Start Element: " + qName);
if (qName.equalsIgnoreCase("FIRSTNAME")) {
bfname = true;
}
if (qName.equalsIgnoreCase("LASTNAME")) {
blname = true;
}
if (qName.equalsIgnoreCase("NICKNAME")) {
bnname = true;
}
if (qName.equalsIgnoreCase("SALARY")) {
bsalary = true;
}
}
...
Слайд 42

Пример. Часть 3 ... public void endElement(String uri, String localName, String

Пример. Часть 3

...
public void endElement(String uri, String localName,

String qName) throws SAXException {
System.out.println("End Element: " + qName);
}
public void characters(char ch[], int start, int length)
throws SAXException {
if (bfname) {
System.out.println("First Name: " +
new String(ch, start, length));
bfname = false;
}
if (blname) {
System.out.println("Last Name: " + new String(ch, start, length));
blname = false;
}
...
Слайд 43

Пример. Часть 4 ... if (bnname) { System.out.println("Nick Name: " +

Пример. Часть 4

...
if (bnname) {
System.out.println("Nick Name: "

+
new String(ch, start, length));
bnname = false;
}
if (bsalary) {
System.out.println("Salary: " + new String(ch, start, length));
bsalary = false;
}
}
};
saxParser.parse("xmlfile.xml", handler);
} catch (Exception e) {
e.printStackTrace();
}
}
Слайд 44

Пример. Результат Start Element: company Start Element: staff Start Element: firstname

Пример. Результат

Start Element: company
Start Element: staff
Start Element: firstname
First Name: Tom
End Element:

firstname
Start Element: lastname
Last Name: King
End Element: lastname
Start Element: nickname
Nick Name: Boss
End Element: nickname
Start Element: salary
Salary: 100500
End Element: salary
End Element: staff
...

...
Start Element: staff
Start Element: firstname
First Name: Ben
End Element: firstname
Start Element: lastname
Last Name: Gum
End Element: lastname
Start Element: nickname
Nick Name: Bubble
End Element: nickname
Start Element: salary
Salary: 100000
End Element: salary
End Element: staff
End Element: company

Слайд 45

Работа с DOM Считывание документа, опять же, реализует транслятор Результат считывания

Работа с DOM

Считывание документа, опять же, реализует транслятор
Результат считывания возвращается в

виде дерева объектов, реализующих интерфейс org.w3c.dom.Node
Дальнейшая обработка ведется уже на уровне бизнес-логики
Слайд 46

Пакет org.w3c.dom Базовый интерфейс Node, содержит основные методы работы с узлом

Пакет org.w3c.dom

Базовый интерфейс Node, содержит основные методы работы с узлом
От него

наследуют специфические интерфейсы для конкретных видов узлов:
Document
Element
Text
Comment
Attr
и др.
Каждый интерфейс добавляет новую функциональность (например Document, является фабрикой для создания остальных узлов)
Слайд 47

Пакет javax.xml.parsers Класс DocumentBuilderFactory Образец проектирования Singleton, позволяет настроить и получить

Пакет javax.xml.parsers

Класс DocumentBuilderFactory Образец проектирования Singleton, позволяет настроить и получить экземпляр фабрики

для производства DocumentBuilder
Класс DocumentBuilder Непосредственно транслятор, экземпляры получаются от фабрики DocumentBuilderFactory
Слайд 48

Пример. Файл XML Tom King Boss 100500 Ben Gum Bubble 100000

Пример. Файл XML




Tom
King
Boss
100500


Ben
Gum
Bubble
100000


Слайд 49

Пример. Часть 1 import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.*; public class

Пример. Часть 1

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.*;
public class ReadXMLFile_DOM {
public static

void main(String argv[]) {
try {
File fXmlFile = new File("xmlfile.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
System.out.println("Root element : " + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("staff");
System.out.println("----------------------------");
...
Слайд 50

Пример. Часть 2 ... for (int temp = 0; temp Node

Пример. Часть 2

...
for (int temp = 0; temp <

nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element : " + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Staff id : " +
eElement
.getAttribute("id"));
System.out.println("First Name : " +
eElement
.getElementsByTagName("firstname")
.item(0)
.getTextContent());
...
Слайд 51

Пример. Часть 3 System.out.println("Last Name : " + eElement .getElementsByTagName("lastname") .item(0).getTextContent());

Пример. Часть 3

System.out.println("Last Name : " +
eElement
.getElementsByTagName("lastname")
.item(0).getTextContent());
System.out.println("Nick Name :

" +
eElement
.getElementsByTagName("nickname")
.item(0).getTextContent());
System.out.println("Salary : " +
eElement
.getElementsByTagName("salary")
.item(0)
.getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Слайд 52

Пример. Результат Root element : company ---------------------------- Current Element : staff

Пример. Результат

Root element : company
----------------------------
Current Element : staff
Staff id : 1001
First

Name : Tom
Last Name : King
Nick Name : Boss
Salary : 100500
Current Element : staff
Staff id : 1002
First Name : Ben
Last Name : Gum
Nick Name : Bubble
Salary : 100000
Слайд 53

Запись XML Средствами пакета javax.xml.transform Средствами API третьих фирм JDOM (www.jdom.org)

Запись XML

Средствами пакета javax.xml.transform
Средствами API третьих фирм JDOM (www.jdom.org)
Тот же DOM, но реализованный

более дружелюбно для Java
Поддерживает XPath и XSLT
Слайд 54

Пример. Часть 1 import org.w3c.dom.*; import org.xml.sax.SAXException; import javax.xml.parsers.*; import javax.xml.transform.*;

Пример. Часть 1

import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import java.io.IOException;
public class

WriterDOM {
public static void main(String[] args) {
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("test.xml");
DOMSource dom_source = new DOMSource(document);
StreamResult out_stream = new StreamResult("test2.xml");
...
Слайд 55

Пример. Часть 2 ... TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer =

Пример. Часть 2

...
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer =

tFactory.newTransformer(/* !!!! */);
// Вспомогательные действия, связанные с тем, что такая
// элементарная трансформация не "копирует" директиву
// !DOCTYPE. В зависимости от PUBLIC- или SYSTEM-описания DTD,
// можно использовать разные свойства transformer'а
DocumentType docType = document.getDoctype();
if (docType != null) {
String systemID = docType.getSystemId();
String publicID = docType.getPublicId();
String res = publicID + "\" \"" + systemID;
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, systemID);
//transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, res);
}
...
Слайд 56

Пример. Часть 3 ... // Прочие настройки преобразователя transformer.transform (dom_source, out_stream);

Пример. Часть 3

...
// Прочие настройки преобразователя
transformer.transform (dom_source,

out_stream);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e){
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
}
Слайд 57

Настройка преобразователя Метод создания объекта преобразователя TransformerFactory.newTransformer() имеет 2 формы: без

Настройка преобразователя

Метод создания объекта преобразователя TransformerFactory.newTransformer() имеет 2 формы:
без аргументов –

будет создаваться «копия» исходного документа
с аргументом типа Source – ссылка на загруженный объект xml-документа, в котором описано XSL-преобразование
Метод Transformer.setOutputProperty() позволяет настроить некоторые параметры вывода (см. класс OutputKeys)
Слайд 58

Пример XSL-преобразования import java.io.*; import java.net.URISyntaxException; import javax.xml.transform.*; import javax.xml.transform.stream.*; public

Пример XSL-преобразования

import java.io.*;
import java.net.URISyntaxException;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
public class XSLTWriterDOM {
public static

void main(String[] args) throws IOException, URISyntaxException, TransformerException {
TransformerFactory factory = TransformerFactory.newInstance();
Source xslt = new StreamSource(new File("transformation.xsl"));
Transformer transformer = factory.newTransformer(xslt);
Source text = new StreamSource(new File("catalog.xml"));
transformer.transform(text, new StreamResult(new File("out.xml")));
}
}
Слайд 59

Размышления на тему Итак, что мы научились делать: Считывать информацию из

Размышления на тему

Итак, что мы научились делать:
Считывать информацию из XML-документов
SAX
DOM
Записывать информацию

в XML-документы
Какой еще инструмент был бы удобен?..
А если бы мы умели записывать и считывать из XML непосредственно объекты Java?..
Слайд 60

Шаг 1. Сохранение JavaBeans В версии JavaSE 1.4 для объектов JavaBeans

Шаг 1. Сохранение JavaBeans

В версии JavaSE 1.4 для объектов JavaBeans появились

механизмы, сходные с сериализацией
Реализовывали их классы java.beans.XMLEncoder и java.beans.XMLDecoder
Недостаток: механизм основан на интроспекции, требует соблюдения правил именования и т.д.
Слайд 61

Пример. Часть 1 XMLEncoder e = new XMLEncoder( new BufferedOutputStream( new

Пример. Часть 1

XMLEncoder e = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("Test.xml"))); e.writeObject(new

JButton("Hello, world"));
e.close();





frame1



0 0
200 200


Слайд 62

Пример. Часть 2 Hello true

Пример. Часть 2





Hello





true



Слайд 63

Шаг 2. Java Architecture for XML Binding (JAXB) В версии JavaSE

Шаг 2. Java Architecture for XML Binding (JAXB)

В версии JavaSE 1.5

появились новые механизмы JAXB
Связанные с ними классы находятся в пакете javax.xml.bind
Позволяют производить «сериализацию» объектов и их структур в XML
Классы объектов должны быть специальным образом подготовлены
Активно использует механизм аннотаций…
Слайд 64

Пример. RootClass import javax.xml.bind.annotation.*; @XmlRootElement public class RootClass { private int

Пример. RootClass

import javax.xml.bind.annotation.*;
@XmlRootElement
public class RootClass {
private int value;
@XmlElement
private

NodeClass name = new NodeClass();
public RootClass() {
value = 0;
name.setInnerValue("");
}
public NodeClass getName() { return name; }
public int getValue() { return value; }
public void setValue(int newValue) { value = newValue; }
}
Слайд 65

Пример. NodeClass (1) public class NodeClass { private String innerValue =

Пример. NodeClass (1)

public class NodeClass {
private String innerValue = "";

private double rval = Math.random();
public String getInnerValue() {
return innerValue;
}
public void setInnerValue(String newInnerValue) {
innerValue = newInnerValue;
}
public void print() {
System.out.println(rval);
}
}
Слайд 66

Пример. WriterJAXB import javax.xml.bind.*; import java.io.*; public class WriterJAXB { public

Пример. WriterJAXB

import javax.xml.bind.*;
import java.io.*;
public class WriterJAXB {
public static void main(String[]

args){
try {
RootClass object1 = new RootClass();
object1.setValue(5);
object1.getName().setInnerValue("ABC");
JAXBContext jc = JAXBContext.newInstance(RootClass.class);
Marshaller m = jc.createMarshaller();
OutputStream os = new FileOutputStream("test.xml");
m.marshal(object1, os);
os.close();
}
catch (JAXBException e) {e.printStackTrace();}
catch (FileNotFoundException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
}
}
Слайд 67

Содержимое файла после выполнения (1) Что сохранено: значение name, помеченное аннотацией

Содержимое файла после выполнения (1)

Что сохранено:
значение name, помеченное аннотацией
значение innerValue, не

помеченное аннотацией
значение rval не сохранено
значение value, не помеченное аннотацией
Сохранились элементы, являющиеся свойствами JavaBeans




ABC

5

Слайд 68

Пример. NodeClass (2) import javax.xml.bind.annotation.*; public class NodeClass { private String

Пример. NodeClass (2)

import javax.xml.bind.annotation.*;
public class NodeClass {
private String innerValue =

"";
@XmlElement
private double rval = Math.random();
public String getInnerValue() {
return innerValue;
}
public void setInnerValue(String newInnerValue) {
innerValue = newInnerValue;
}
public void print() {
System.out.println(rval);
}
}
Слайд 69

Содержимое файла после выполнения (2) Сохранились элементы, являющиеся свойствами JavaBeans Сохранились

Содержимое файла после выполнения (2)

Сохранились элементы, являющиеся свойствами JavaBeans
Сохранились элементы, помеченные

аннотациями




0.9878295088863659
ABC

5

Слайд 70

Пакет javax.xml.bind.annotation Содержит разнообразнейшие аннотации, описывающие параметры маршалинга и анмаршалинга @XmlRootElement

Пакет javax.xml.bind.annotation

Содержит разнообразнейшие аннотации, описывающие параметры маршалинга и анмаршалинга
@XmlRootElement Обозначает корневой элемент

сохраняемой структуры
@XmlElement Обозначает поля и свойства (для JavaBeans)
@XmlTransient Обозначает то, что поле не будет сохраняться
Слайд 71

Пример. ReaderJAXB import javax.xml.bind.*; import java.io.*; public class ReaderJAXB { public

Пример. ReaderJAXB

import javax.xml.bind.*;
import java.io.*;
public class ReaderJAXB {
public static void main(String[]

args) {
try {
JAXBContext jc = JAXBContext.newInstance(RootClass.class);
InputStream is = new FileInputStream("test.xml");
Unmarshaller um = jc.createUnmarshaller();
RootClass object2 = (RootClass) um.unmarshal(is);
System.out.println(object2.getValue());
System.out.println(object2.getName().getInnerValue());
is.close();
}
catch (JAXBException e) {e.printStackTrace();}
catch (FileNotFoundException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
}
}
Слайд 72

Спасибо за внимание!

Спасибо за внимание!