- java.lang.Object
-
- javax.xml.bind.annotation.adapters.XmlAdapter<ValueType,BoundType>
-
- 参数类型
-
BoundType
- JAXB不知道如何处理的类型。 写入适配器以允许此类型通过ValueType
用作内存中的表示ValueType
。 -
ValueType
- JAXB知道如何处理开箱即用的类型。
public abstract class XmlAdapter<ValueType,BoundType> extends Object
适应Java类型进行自定义封送。用法:
某些Java类型不会自然映射到XML表示,例如
HashMap
或其他非JavaBean类。 相反,XML表示可以映射到Java类型,但应用程序可以选择使用另一种Java类型访问XML表示。 例如,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:确定HashMap所需的XML表示形式。
<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>
- 从以下版本开始:
- 1.6,JAXB 2.0
- 另请参见:
-
XmlJavaTypeAdapter
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
XmlAdapter()
派生类的Do-nothing构造函数。
-
-
-
方法详细信息
-
unmarshal
public abstract BoundType unmarshal(ValueType v) throws 异常
将值类型转换为绑定类型。- 参数
-
v
- 要转换的值。 可以为null。 - 异常
-
异常
- 转换过程中是否有错误。 来电者负责通过ValidationEventHandler
向用户报告错误。
-
marshal
public abstract ValueType marshal(BoundType v) throws 异常
将绑定类型转换为值类型。- 参数
-
v
- 要v
的值。 可以为null。 - 异常
-
异常
- 转换过程中是否有错误。 来电者负责通过ValidationEventHandler
向用户报告错误。
-
-