JAXB(Java Architecture for XML Binding) 是一個業界的標準,是一項可以根據XML Schema產生Java類的技術。該過程中,JAXB也提供了將XML執行個體文檔反向產生Java對象樹的方法,並能將Java對象樹的內容重新寫到XML執行個體文檔。從另一方面來講,JAXB提供了快速而簡便的方法將XML模式綁定到Java表示,從而使得Java開發人員在Java應用程式中能方便地結合XML資料和處理函數。JDK中JAXB相關的重要Class和Interface:JAXBContext類,是應用的入口,用於管理XML/Java綁定資訊。Marshaller介面,將Java對象序列化為XML資料。Unmarshaller介面,將XML資料還原序列化為Java對象。JDK中JAXB相關的重要Annotation:@XmlType,將Java類或枚舉類型映射到XML模式類型@XmlAccessorType(XmlAccessType.FIELD) ,控制欄位或屬性的序列化。FIELD表示JAXB將自動綁定Java類中的每個非靜態(static)、非瞬態的(由@XmlTransient標註)欄位到XML。其他值還有XmlAccessType.PROPERTY和XmlAccessType.NONE。@XmlAccessorOrder,控制JAXB 綁定類中屬性和欄位的排序。@XmlJavaTypeAdapter,使用定製的適配器(即擴充抽象類別XmlAdapter並覆蓋marshal()和unmarshal()方法),以序列化Java類為XML。@XmlElementWrapper ,對於數組或集合(即包含多個元素的成員變數),產生一個封裝該數組或集合的XML元素(稱為封裝器)。@XmlRootElement,將Java類或枚舉類型映射到XML元素。@XmlElement,將Java類的一個屬性對應到與屬性同名的一個XML元素。@XmlAttribute,將Java類的一個屬性對應到與屬性同名的一個XML屬性。其他:對於要序列化(marshal)為XML的Java類,絕不能把成員變數聲明為public,否則運行將拋出異常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException。對於JAXB相關的重要Annotation的聲明,如@Xml.....,可以放在成員變數的setter()
或getter()方法上,兩者中任選其一即可,但決不能放在成員變數上,否則運行將拋出異常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException。“xjc”工具可以用來將XML模式或其他類型模式檔案(Java 1.6實驗性地支援RELAX NG,DTD以及WSDL)轉換為Java類。Java類使用javax.xml.bind.annotation包下的Java
標註,例如@XmlRootElement和@XmlElement。XML列表序列表示為java.util.List類型的屬性, 通過JAXBContext可以建立Marshallers(將Java對象轉換成XML)和Unmarshallers(將XML解析為Java對象)。此外,JAXB包括了一個“schemagen”工具,能夠執行“xjc”的反向操作,通過一組標註的Java類建立一個XML模式。預設的資料類型綁定下面的表格列出了JAXB中XML資料類型和Java資料類型的映射。
| XML Schema類型 |
Java資料類型 |
| xsd:string |
java.lang.String |
| xsd:positiveInteger |
java.math.BigInteger |
| xsd:int |
int |
| xsd:long |
long |
| xsd:short |
short |
| xsd:decimal |
java.math.BigDecimal |
| xsd:float |
float |
| xsd:double |
double |
| xsd:boolean |
boolean |
| xsd:byte |
byte |
| xsd:QName |
javax.xml.namespace.QName |
| xsd:dateTime |
javax.xml.datatype.XMLGregorianCalendar |
| xsd:base64Binary |
byte[] |
| xsd:hexBinary |
byte[] |
| xsd:unsignedInt |
long |
| xsd:unsignedShort |
int |
| xsd:unsignedByte |
short |
| xsd:time |
javax.xml.datatype.XMLGregorianCalendar |
| xsd:date |
javax.xml.datatype.XMLGregorianCalendar |
| xsd:g |
javax.xml.datatype.XMLGregorianCalendar |
| xsd:anySimpleType |
java.lang.Object |
| xsd:anySimpleType |
java.lang.String |
| xsd:duration |
javax.xml.datatype.Duration |
| xsd:NOTATION |
javax.xml.namespace.QName |
-
參考資料
-