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文件中, 标签 就会变为 标签。并且加上一个命名空间。 

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接口的一个具体实现类的对象。 

你可能感兴趣的:(java,EE)