Spec-Zone .ru
спецификации, руководства, описания, API
|
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.
Этот абстрактный класс определяет методы для того, чтобы адаптировать связанный тип к типу значения или наоборот. Методы вызываются 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()
Пустой конструктор для производных классов.
|
public abstract BoundType unmarshal(ValueType v) throws Exception
v
- Значение, которое будет преобразовано. Может быть нуль.Exception
- если есть ошибка во время преобразования. Вызывающая сторона ответственна за создание отчетов об ошибке пользователю через ValidationEventHandler
.public abstract ValueType marshal(BoundType v) throws Exception
v
- Значение, чтобы быть convereted. Может быть нуль.Exception
- если есть ошибка во время преобразования. Вызывающая сторона ответственна за создание отчетов об ошибке пользователю через ValidationEventHandler
.
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.