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 implements
XmlAdapter
for custom marshaling.
默认规则:
默认情况下,如果包中不存在 @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
- @XmlRootElement
- @XmlAccessorType(XmlAccessType.PROPERTY)
- public class Boy {
- private String name = "CY";
- private Address address; // 是一个接口
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
在 java object 转换成 xml 的时候,接口Address 无法被转换。
所以 这里要加上 @XmlJavaTypeAdapter(AddressAdapter.class)
所以 要多写一个AddressAdaptor 类。
这个类会返回Address接口的一个具体实现类的对象。