本文转载开源中国:
JAXB 框架提供了丰富的注解供开发者使用来完成从 Java 类开始定制 Web 服务,当然这个定制局限在数据绑定层面上。在这种编程模型中 JAXB 主要完成从 Java 类到 XML schema 的映射。JAX-WS 规范本身也定义了若干注解用于 Web 服务的基础行为定制 ( 比方说服务名称,命名空间等 )。本文我们重点关注如何利用 JAXB 来定制 Web 服务,因此下面我们主要结合 Webshpere 应用服务器 Web 服务实现来介绍一些在编程中常用的注解并介绍相应的 Web 服务行为。
@XmlRootElement 注解用于标注类或枚举类型,用它标注的类在映射后的 schema 中会以一个全局元素的形式出现,元素的类型是一个包含 Java 类属性的 XML 复杂数据类型。我们可以通过 @XmlRootElement 注解的 name 属性来定制映射的 schema 全局元素的名称,一般来说以 @XmlRootElement 标注的类在相应的 XML 文档中会以最外层或根节点形式出现。比方说有如下标注类:
@XmlRootElement(name="RootStudent",namespace="http://service.dsw.ibm.com/") |
@XmlType 注解用于标注类或枚举类型,用它标注的类在映射后的 schema 中中会以一个 XML 复杂数据类型的形式出现。我们可以通过 @XmlType 注解的 name 属性来定制映射的 XML 数据类型的名称,用 propOrder 属性来定制映射后的复杂数据类型的内容顺序等。比方说有如下标注类:
@XmlType(name = "CustomizedStudent", propOrder = { "name", "id", "age" }) |
这个 Java 类在映射后的 Web 服务 schema 中会表现为:
<xs:complexType name="CustomizedStudent"> |
@XmlElement 注解用于标注 Javabean 的属性,用它标注的属性在映射后的 schema 中以元素的形式出现,所有 Javabean 属性映射的元素组合成为 @XmlType 映射的复杂数据类型。我们可以通过 @XmlElement 注解的 name 属性定制映射后的 XML 元素的名称,用 required 属性来指定该元素是否必须出现,用 nillable 属性来指明该元素是否允许空值。比方说有如下标注类:
@XmlType(name = "CustomizedStudent", propOrder = { "name", "id", "age"}) |
这个 Java 类在映射后的 Web 服务 schema 中会表现为:
<xs:complexType name="CustomizedStudent"> |
@XmlAttribute 注解用于标注 Javabean 属性,用它标注的属性在映射后的 schema 中以元素属性形式表现。我们可以通过 @XmlAttribute 注解的 name 属性来定制映射后的名称,用 required 属性来指定是否映射后的属性为必须出现的。比方说有如下标注类:
@XmlType(name = "CustomizedStudent", propOrder={"name","id","age"}) |
这个 Java 类在映射后的 Web 服务 schema 中会表现为:
<xs:complexType name="CustomizedStudent"> |