JavaTM 2 Platform
Standard Ed. 6

javax.xml.bind.annotation.adapters
類別 XmlAdapter<ValueType,BoundType>

java.lang.Object
  繼承者 javax.xml.bind.annotation.adapters.XmlAdapter<ValueType,BoundType>
型別參數:
BoundType - JAXB 不知道如何處理的一些型別。編寫一個適配器,以便允許通過 ValueType 將此型別用作記憶體表示形式。
ValueType - JAXB 無需其他操作便知道如何處理的型別。
直接已知子類別:
CollapsedStringAdapter, HexBinaryAdapter, NormalizedStringAdapter

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 內容的 bound 型別 與映射到 XML 表示形式的 value 型別 不比對。

此抽象類別定義將 bound 型別修改為 value 型別或將 value 型別修改為 bound 型別的方法。在編組或解組過程中,由 JAXB 綁定框架調用這些方法:

因此編寫一個適配器涉及以下步驟:

範例:自定義 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>
 

從以下版本開始:
JAXB 2.0
另請參見:
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
 

建構子詳細資訊

XmlAdapter

protected XmlAdapter()
派生類別的建構子,不執行任何操作。

方法詳細資訊

unmarshal

public abstract BoundType unmarshal(ValueType v)
                             throws Exception
將 value 型別轉換為 bound 型別。

參數:
v - 要轉換的值。可以為 null。
拋出:
Exception - 如果在轉換過程中發生錯誤。調用者通過 ValidationEventHandler 負責向使用者報告錯誤。

marshal

public abstract ValueType marshal(BoundType v)
                           throws Exception
將 bound 型別轉換為 value 型別。

參數:
v - 要轉換的值。可以為 null。
拋出:
Exception - 如果在轉換過程中發生錯誤。調用者通過 ValidationEventHandler 負責向使用者報告錯誤。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only