JAXB 與web service 關係

web service 分爲兩類:
     REST式,直接基於http協議     JAX-RS :全稱是  JavaTM API forRESTful Web Services。JAX-RS是面向資源的,將網絡上的東西當做一種資源,每次請求都是對該資源進行操作,比如對資源的增刪查改。
     RPC式,基於SOAP協議,底層基於http協議  JAX-WS全稱是JavaTM API forXML-Based Web Services 。JAX-WS是面向消息的,每次請求的時候指定了請求的方法。
JAVA web service 三種規範: JAX-WS(JAX-RPC)、JAX-RS、JAXM&SAAJ
     JAX-WS(Java API For XML-WebService),JDK1.6 自帶的版本爲JAX-WS2.1,其底層支持爲JAXB
     JAXM&SAAJ主要用來動態組織soap內容調用web service

JAXB

JAXB(Java API for XML Binding), 是jax-rs jax-ws底層使用的對象與xml之間轉換的工具。在java api 中javax.xml.bind

JAXB中的註解,用來根據java類生成xml內容,同樣可以生成json格式的. jaxb已經進入rt.jar

JAXB Annotation 
  • @XmlRootElement   // xml 文件的根元素,將類或枚舉類型映射到 XML 元素。
  • @XmlElement    //Maps a JavaBean property to a XML element derived from property name. 
  • @XmlAccessorType  // 控制默認情況下是否對字段或 Javabean 屬性進行系列化。默認值 XmlAccessType.PUBLIC_MEMBER
  • @XmlTransient   //Prevents the mapping of a JavaBean property/type to XML representation.
  • @XmlJavaTypeAdapter // Use an adapter that implementsXmlAdapter for custom marshaling. 
XmlAccessorType  
默認規則: 
默認情況下,如果包中不存在 @XmlAccessorType,那麼假定使用以下包級別註釋。 
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER) 
默認情況下,如果類中不存在 @XmlAccessorType,並且沒有任何超類是使用 @XmlAccessorType 註釋的,則假定在類中使用以下默認註釋: 
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER) 
可能值: 
FIELD:    JAXB 綁定類中的每個非靜態、非瞬態字段將會自動綁定到 XML,除非由 XmlTransient 註釋。 
NONE:     所有字段或屬性都不能綁定到 XML,除非使用一些 JAXB 註釋專門對它們進行註釋。 
PROPERTY: JAXB 綁定類中的每個獲取方法/設置方法對將會自動綁定到 XML,除非由 XmlTransient 註釋。 
PUBLIC_MEMBER:每個公共獲取方法/設置方法對和每個公共字段將會自動綁定到 XML,除非由 XmlTransient 註釋。 

XmlRootElement

對於根元素,可以設置屬性: 

@XmlRootElement(name="b" nameSpace="http://test") 
這樣,在生成的xml文件中,<boy> 標籤 就會變爲 <b> 標籤。並且加上一個命名空間。 

XmlJavaTypeAdaptor

Java代碼  收藏代碼
  1. @XmlRootElement  
  2. @XmlAccessorType(XmlAccessType.PROPERTY)  
  3. public class Boy {  
  4.      
  5.     private String name = "CY";  
  6.   
  7.     private Address address; // 是一個接口  
  8.      
  9.     public String getName() {  
  10.         return name;  
  11.     }  
  12.   
  13.     public void setName(String name) {  
  14.         this.name = name;  
  15.     }  
  16.   
  17. }  

在 java object 轉換成 xml 的時候,接口Address 無法被轉換。 
所以 這裏要加上 @XmlJavaTypeAdapter(AddressAdapter.class) 
所以 要多寫一個AddressAdaptor 類。 
這個類會返回Address接口的一個具體實現類的對象。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章