- •Лекция 14
- •Связывание данных
- •JAXB
- •Библиотека JIBX
- •Базовая связь
- •Атрибуты, методы доступа, необязательные значения и т.п.
- •Порядок элементов
- •Неизвестные элементы
- •Структуры
- •«Плоское» связывание
- •Разделяемое связывание
- •Игнорируемые элементы
- •Простое использование коллекций
- •Разнородные коллекции
- •Указание элементов коллекций по «отображениям»
- •Ссылки на элементы коллекций
- •«Отображения» (mapping)
- •Абстракция в отображениях
- •Отображение наследуемых классов
- •Дополительные возможности
Лекция 14
XML сериализация
Связывание данных
Целью связывания данных (data binding) является упрощение сериализации данных.
Библиотеки для XML:
JAXB (в Java SE с 1.6)
XMLBeans
Hibernate
JibX
XStream
.NET
Стандартная библиотека
JAXB
Библиотека JIBX
Преимущества
Наиболее быстрая (особенно с небольшими объектами)
Позволяет связать уже разработанные классы с XML
Open source (лицензия BSD)
Базовая связь
<customer>
<person>
<cust-num>123456789</cust-num>
<first-name>John</first-name>
<last-name>Smith</last-name>
</person>
<street>12345 Happy Lane</street>
<city>Plunk</city>
<state>WA</state>
<zip>98059</zip>
<phone>888.555.1234</phone>
</customer>
public class Customer { public Person person; public String street; public String city; public String state; public Integer zip; public String phone;
}
public class Person { public int customerNumber; public String firstName; public String lastName;
}
Атрибуты, методы доступа, необязательные значения и т.п.
Порядок элементов
По-умолчанию, порядок принимается во внимание. Данное поведение можно поменять
Неизвестные элементы
По-умолчанию, если парсер XML встречает неизвестный элемент (не описанный в схеме), это вызывает ошибку.
Данное поведение можно отключить, задав в схеме атрибут flexible="true" (для структуры)
Дублирующие элементы так же вызывают пл- умолчанию ошибку (отключается установкой атрибута allow-repeats="true" )
Структуры
public class Customer { public int customerNumber; public String firstName; public String lastName; public String street;
public String city; public String state; public Integer zip;
} public String phone;
public class Customer { public int customerNumber; public String firstName; public String lastName; public Address address;
} public String phone;
public class Address { public String street1; public String city; public String state;
} public String zip;