|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object javax.xml.bind.annotation.adapters.XmlAdapter<ValueType,BoundType>
BoundType
- JAXB 不知道如何處理的一些型別。編寫一個適配器,以便允許通過 ValueType 將此型別用作記憶體表示形式。ValueType
- JAXB 無需其他操作便知道如何處理的型別。public abstract class XmlAdapter<ValueType,BoundType>
修改 Java 型別以適應自定義編組。
用法:
一些 Java 型別不能自然映射到 XML 表示形式,例如,HashMap 或其他非 JavaBean 類別。反之,XML 表示形式可以映射到 Java 型別,但是應用程序可能會選擇使用另一種 Java 型別存取 XML 表示形式。例如,預設情況下,Java 綁定規則網要將 xs:DateTime 綁定到 XmlGregorianCalendar。但應用程序可能需要將 xs:DateTime 綁定到自定義型別,例如 MyXmlGregorianCalendar。在這兩種情況下,應用程序用來存取 XML 內容的 bound 型別 與映射到 XML 表示形式的 value 型別 不比對。
此抽象類別定義將 bound 型別修改為 value 型別或將 value 型別修改為 bound 型別的方法。在編組或解組過程中,由 JAXB 綁定框架調用這些方法:
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:編寫能夠產生上述網要定義的 value 型別。
public class MyHashMapType { List<MyHashMapEntryType> entry; } public class MyHashMapEntryType { @XmlAttribute public Integer key; @XmlValue public String value; }
步驟 4:編寫將 value 型別 (MyHashMapType) 修改為 bound 型別(應用程序使用的 HashMap)的適配器。
public final class MyHashMapAdapter extends XmlAdapter<HashMap, MyHashMapType> { ... }
步驟 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()
派生類別的建構子,不執行任何操作。 |
方法摘要 | |
---|---|
abstract ValueType |
marshal(BoundType v)
將 bound 型別轉換為 value 型別。 |
abstract BoundType |
unmarshal(ValueType v)
將 value 型別轉換為 bound 型別。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
建構子詳細資訊 |
---|
protected XmlAdapter()
方法詳細資訊 |
---|
public abstract BoundType unmarshal(ValueType v) throws Exception
v
- 要轉換的值。可以為 null。
Exception
- 如果在轉換過程中發生錯誤。調用者通過 ValidationEventHandler
負責向使用者報告錯誤。public abstract ValueType marshal(BoundType v) throws Exception
v
- 要轉換的值。可以為 null。
Exception
- 如果在轉換過程中發生錯誤。調用者通過 ValidationEventHandler
負責向使用者報告錯誤。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。