Spec-Zone.ru › OpenJDK 8

Класс 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API