|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
java.lang.Objectjavax.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。