JAXB(Java Architecture for XML Binding) 是一個業界的標準,是一項能夠根據XML Schema產生Java類的技術。該過程當中,JAXB也提供了將XML實例文檔反向生成Java對象樹的方法,並能將Java對象樹的內容從新寫到XML實例文檔。從另外一方面來說,JAXB提供了快速而簡便的方法將XML模式綁定到Java表示,從而使得Java開發者在Java應用程序中能方便地結合XML數據和處理函數。java
JAXB 2.0是JDK 1.6的組成部分。JAXB 2.2.3是JDK 1.7的組成部分。app
JAXBContext類,是應用的入口,用於管理XML/Java綁定信息。ide
Marshaller接口,將Java對象序列化爲XML數據。函數
Unmarshaller接口,將XML數據反序列化爲Java對象。spa
用在class類的註解,常與@XmlRootElement,@XmlAccessorType一塊兒使用。.net
它有三個屬性:name、propOrder、namespace,常常使用的只有前兩個屬性。code
同時使用了@XmlType(propOrder={})和@XmlAccessorOrder(XmlAccessOrder.ALPHABETICAL)的時候,生成的xml只按照propOrder定義的順序生成元素orm
@XmlType(name = "basicStruct", propOrder = { "intValue", "stringArray", "stringValue" )
2. @XmlRootElementxml
用於類級別的註解,對應xml的跟元素,常與 @XmlType 和 @XmlAccessorType一塊兒使用。如:對象
@XmlType @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement public class Address { ..... }
3. @XmlElement
將Java對象的屬性映射爲xml的節點,在使用@XmlElement時,可經過name屬性改變java對象屬性在xml中顯示的名稱。如:
@XmlType @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement public class Address { @XmlElement(name="Address") private String yourAddress; }
4. @XmlAtrribute
用於把java對象的屬性映射爲xml的屬性,並可經過name屬性爲生成的xml屬性指定別名。如:
@XmlType @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement public class Address { @XmlElement(name="Address") private String yourAddress; @XmlAttribute(name="Country") private String state; }
5. @XmlAccessorType
用於指定由java對象生成xml文件時對java對象屬性的訪問方式。常與@XmlRootElement、@XmlType一塊兒使用。它的屬性值是XmlAccessType的4個枚舉值,分別爲:
默認訪問級別是XmlAccessType.PUBLIC_MEMBER,所以,若是java對象中的private成員變量設置了public權限的getter/setter方法,就不要在private變量上使用@XmlElement和@XmlAttribute註解,不然在由java對象生成xml時會報同一個屬性在java類裏存在兩次的錯誤。同理,若是@XmlAccessorType的訪問權限爲XmlAccessType.NONE,若是在java的成員變量上使用了@XmlElement或@XmlAttribute註解,這些成員變量依然能夠映射到xml文件。
6. @XmlAccessorOrder
用於對java對象生成的xml元素進行排序。它有兩個屬性值:
7. @XmlTransient
用於標示在由java對象映射xml時,忽略此屬性。即,在生成的xml文件中不出現此元素。
8. @XmlJavaTypeAdapter
經常使用在轉換比較複雜的對象時,如map類型或者格式化日期等。使用此註解時,須要本身寫一個adapter類繼承XmlAdapter抽象類,並實現裏面的方法。
@XmlJavaTypeAdapter(value=xxx.class),value爲本身定義的adapter類
XmlAdapter 抽象接口以下:
public abstract class XmlAdapter<ValueType,BoundType> { // Do-nothing constructor for the derived classes. protected XmlAdapter() {} // Convert a value type to a bound type. public abstract BoundType unmarshal(ValueType v); // Convert a bound type to a value type. public abstract ValueType marshal(BoundType v); }
實際案例:
package jaxb.shop; import java.util.Date; import java.text.SimpleDateFormat; import javax.xml.bind.annotation.adapters.XmlAdapter; public class DateAdapter extends XmlAdapter<String, Date> { private String pattern = "yyyy-MM-dd HH:mm:ss"; SimpleDateFormat fmt = new SimpleDateFormat(pattern); @Override public Date unmarshal(String dateStr) throws Exception { return fmt.parse(dateStr); } @Override public String marshal(Date date) throws Exception { return fmt.format(date); } }
9. @XmlElementWrapper
表示生成一個包裝 XML 表示形式的包裝器元素。 此元素主要用於生成一個包裝集合的包裝器 XML 元素。僅容許出如今集合屬性上。