BoundType - Тип, который не знает JAXB, как обработать. Адаптер пишется, чтобы позволить этому типу использоваться в качестве представления в оперативной памяти через ValueType.ValueType - Тип, который знает JAXB, как обработать из поля.public abstract class XmlAdapter<ValueType,BoundType> extends Object
Использование:
Некоторые типы Java не отображаются естественно на представление XML, например HashMap или другой не классы JavaBean. Наоборот, XML repsentation может отобразиться на тип Java, но приложение может выбрать к accesss представление XML, используя другой тип Java. Например, схема к правилам привязки Java связывают xs:DateTime по умолчанию с XmlGregorianCalendar. Но приложение может требовать связать xs:DateTime с пользовательским типом, MyXmlGregorianCalendar, например. В обоих случаях есть несоответствие между связанным типом, используемым приложением, чтобы получить доступ к контенту XML и типу значения, который отображается на представление XML.
Этот абстрактный class определяет методы для того, чтобы адаптировать связанный тип к типу значения или наоборот. Методы вызываются JAXB обязательная платформа во время маршалинга и немаршалинга:
XmlJavaTypeAdapter Пример: Специализированное отображение HashMap
Следующий пример иллюстрирует использование @XmlAdapter и @XmlJavaTypeAdapter, чтобы настроить отображение HashMap.
Шаг 1: Определите требуемое представление XML для HashMap.
<hashmap>
<entry key="id123">this is a value</entry>
<entry key="id312">this is another value</entry>
...
</hashmap>
Шаг 2: Определите определение схемы, за которым выше должно следовать требуемое представление XML, показанное.
<xs:complexType name="myHashMapType">
<xs:sequence>
<xs:element name="entry" type="myHashMapEntryType"
minOccurs = "0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="myHashMapEntryType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="key" type="xs:int"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
Шаг 3: Запишите типы значения, которые могут генерировать вышеупомянутое определение схемы.
public class MyHashMapType {
List<MyHashMapEntryType> entry;
}
public class MyHashMapEntryType {
@XmlAttribute
public Integer key;
@XmlValue
public String value;
}
Шаг 4: Запишите адаптер, который адаптирует тип значения, MyHashMapType к связанному типу, HashMap, используемый приложением.
public final class MyHashMapAdapter extends
XmlAdapter<MyHashMapType,HashMap> { ... }
Шаг 5: Используйте адаптер.
public class Foo {
@XmlJavaTypeAdapter(MyHashMapAdapter.class)
HashMap hashmap;
...
}
Вышеупомянутый фрагмент кода отобразится на следующую схему:
<xs:complexType name="Foo">
<xs:sequence>
<xs:element name="hashmap" type="myHashMapType"
</xs:sequence>
</xs:complexType>
XmlJavaTypeAdapter| Модификатор | Конструктор и Описание |
|---|---|
protected |
XmlAdapter()
Пустой конструктор для производных классов.
|
| Модификатор и Тип | Метод и Описание |
|---|---|
abstract ValueType |
marshal(BoundType v)
Преобразуйте связанный тип в тип значения.
|
abstract BoundType |
unmarshal(ValueType v)
Преобразуйте тип значения в связанный тип.
|
public abstract BoundType unmarshal(ValueType v) throws Exception
v - Значение, которое будет преобразовано. Может быть нуль.Exception - если есть ошибка во время преобразования. Вызывающая сторона ответственна за создание отчетов об ошибке пользователю через ValidationEventHandler.public abstract ValueType marshal(BoundType v) throws Exception
v - Значение, чтобы быть convereted. Может быть нуль.Exception - если есть ошибка во время преобразования. Вызывающая сторона ответственна за создание отчетов об ошибке пользователю через ValidationEventHandler.
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92