Класс XmlAdapter<ValueType,BoundType>
- java.lang.Object
-
- javax.xml.bind.annotation.adapters.XmlAdapter<ValueType,BoundType>
- Type Parameters:
-
BoundType- Тип, с которым JAXB не знает, как работать. Адаптер написан для использования этого типа в качестве представления в памяти черезValueType. -
ValueType- Тип, с которым JAXB умеет работать из коробки.
- Непосредственные известные подклассы:
- CollapsedStringAdapter, HexBinaryAdapter, NormalizedStringAdapter
public abstract class XmlAdapter<ValueType,BoundType> extends Object
Адаптирует тип Java для пользовательского маршалинга.
Использование:
Некоторые типы Java не отображаются естественным образом в представлении XML, например HashMap или другие классы, не являющиеся JavaBean. И наоборот, XML-представление может соответствовать типу Java, но приложение может выбрать доступ к представлению XML с помощью другого типа Java. Например, правила связывания схемы с Java по умолчанию связывают xs:DateTime с XmlGregorianCalendar. Но приложение может захотеть связать xs:DateTime с пользовательским типом, например, MyXmlGregorianCalendar. В обоих случаях существует несоответствие между связанным типом, используемым приложением для доступа к содержимому XML, и типом значения, который отображается в представлении XML.
Этот абстрактный класс определяет методы для адаптации связанного типа к типу значения и наоборот. Методы вызываются фреймворком привязки JAXB во время маршалинга и унмаршалинга:
- XmlAdapter.marshal(...): Во время маршалинга фреймворк привязки JAXB вызывает XmlAdapter.marshal(..), чтобы адаптировать связанный тип к типу значения, который затем маршалится в XML-представление.
- XmlAdapter.unmarshal(...): Во время унмаршалинга фреймворк привязки JAXB сначала унмаршалит XML-представление в тип значения, а затем вызывает XmlAdapter.unmarshal(..), чтобы адаптировать тип значения к связанному типу.
- Напишите адаптер, который реализует этот абстрактный класс.
- Установите адаптер с помощью аннотации
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>
- С тех пор:
- JAXB 2.0
- См. также:
XmlJavaTypeAdapter
Конструкторы
| Модификатор | Конструктор и описание |
|---|---|
protected |
XmlAdapter() Конструктор без действий для производных классов. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
abstract ValueType |
marshal(BoundType v) Преобразование связанного типа в тип значения. |
abstract BoundType |
unmarshal(ValueType v) Преобразование типа значения в связанный тип. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
XmlAdapter
protected XmlAdapter()
Конструктор без действий для производных классов.
Методы
unmarshal
public abstract BoundType unmarshal(ValueType v)
throws Exception Преобразование типа значения в связанный тип.
- Параметры:
-
v- Значение, подлежащее преобразованию. Может быть null. - Исключения:
-
Exception- если при преобразовании возникла ошибка. Вызывающий метод отвечает за сообщение об ошибке пользователю черезValidationEventHandler.
marshal
public abstract ValueType marshal(BoundType v)
throws Exception Преобразование связанного типа в тип значения.
- Параметры:
-
v- Значение, подлежащее преобразованию. Может быть null. - Исключения:
-
Exception- если при преобразовании возникла ошибка. Вызывающий метод отвечает за сообщение об ошибке пользователю черезValidationEventHandler.
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.