BoundType
型JAXB不知道如何处理。一个适配器允许这种类型作为内存中的表示形式,通过
ValueType。
ValueType
型JAXB知道如何处理开箱。
public abstract class XmlAdapter<ValueType,BoundType> extends Object
使用:
一些java类型不自然地映射到一个XML表示形式,例如HashMap或其他非JavaBean类。相反,一个XML表示可以映射到java类型,但应用可以访问使用另一个java类型的XML表示形式。例如,架构java绑定规则结合XS:日期默认XmlGregorianCalendar。但应用可能希望把XS:日期为自定义类型,例如MyXmlGregorianCalendar。在这两种情况下,有绑定类型之间的不匹配,通过应用程序访问XML内容和值类型使用,即映射到XML的表示。
这个抽象类定义了将绑定类型调整为值类型的方法,反之亦然。该方法是通过JAXB绑定编组和解组时,框架调用:
XmlJavaTypeAdapter
例子:定制映射HashMap
下面举例说明@XmlAdapter和@XmlJavaTypeAdapter定制一个HashMap映射的使用。
步骤1:为HashMap确定所需的XML表示形式。
HashMap > < <输入键=“id123”> 这是一个价值 <进入> <输入键=“id312”> 这是另一个值 <进入> …< / HashMap > 进入> 输入键=“id312”> 进入> 输入键=“id123”>
步骤2:确定架构定义所需的XML表示形式所示应遵循。
< xs:complexType名称=“myhashmaptype”>< xs:序列>< xs:元名称=“进入”type=“myhashmapentrytype”minOccurs =“0”=“maxOccurs无界”/>< / xs:序列>< / xs:名称>< xs:complexType名称=“myhashmapentrytype”>< xs:支持>< xs:扩展基地=“XS:字符串“>< xs:属性名=“钥匙”type=“XS:int”/>< / xs:扩展>< / xs:支持>< / xs:名称>
步骤3:写能产生上述架构定义的值类型。
公共课myhashmaptype {< myhashmapentrytype >条目列表;}公共课myhashmapentrytype {@ XmlAttribute公共整数键;@ XmlValue公共字符串值;}
步骤4:写适应值类型的适配器,MyHashMapType绑定类型,HashMap,由应用程序使用。
最后一类公共myhashmapadapter延伸XMLAdapter < myhashmaptype,HashMap > {…}
步骤5:使用适配器。
公共类Foo {“xmljavatypeadapter(myhashmapadapter。类)HashMap hashmap;…}上面的代码片段会l图以下模式:
< xs:complexType名称=“foo”>< xs:序列>< xs:元名称=“=”myhashmaptype HashMap“型”< / xs:序列>< / xs:名称>
XmlJavaTypeAdapter
public abstract BoundType unmarshal(ValueType v) throws 异常
v
-要转换的值。可以为空。
异常
-如果有一个错误在转换。调用者负责报告的错误通过
ValidationEventHandler
用户。
public abstract ValueType marshal(BoundType v) throws 异常
v
要convereted价值。可以为空。
异常
-如果有一个错误在转换。调用者负责报告的错误通过
ValidationEventHandler
用户。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.