Java Web 服务: Axis2 中的 JAXB 和 JAX-WS
2009-11-05 00:00:00 来源:WEB开发网@XmlAccessorType 注释在包或类级别使用,用于控制从类中访问值的方式 — 包括访问所有字段、访问所有具有 get/set 访问方法的属性、只访问公开字段和属性,或仅根据某个注释的指定进行访问。@XmlType 注释在匹配某个模式类型的类或 enum 定义中使用,以向 JAXB 提供模式类型的名称和名称空间(如果有的话)、类型表示中的值的顺序,以及如何使用一个工厂方法构建类的实例(可选)。@XmlRootElement 注释在匹配全局元素定义的类或 enum 定义中使用,用于提供全局元素的名称和名称空间。@XmlElement 和 @XmlAttribute 注释在值中使用(以字段或 JavaBean 属性方法的形式),提供元素或属性名和其他特征)。
JAXB 使用的所有注释都位于 javax.xml.bind.annotation 包中,除了这个简单示例生成的代码中使用的注释外,还包括许多其他注释。JAXB 支持从模式中生成代码(本例就属于此例),也支持从代码中生成。某些注释和选项(比如那些处理对象工厂和串行器/并行器方法的注释和选项)只能用于从代码中生成的情况。
Axis2 中的 JAXB 问题
WSDL2Java 调用 JAXB 参考实现中附带的 XJC 绑定编译器来生成数据模型代码,因此在大多数方面数据模型代码的生成是独立于 Axis2 的。如果直接在 Web 服务使用的模式上面运行 JAXB XJC 绑定编译器,您将生成相同的数据模型。不幸的是,WSDL2Java 和 XJC 之间的阻抗匹配并不总是正确的,这就会导致一些问题。
其中一个问题与在 WSDL 文档中构建模式的方式有关。库服务的初始 WSDL 使用单个文档,该文档合并了两个独立的模式,一个用于 WSDL 消息元素,另一个用于应用程序数据(图书和类型信息)。如 WSDL 允许的那样,消息元素模式通过名称空间引用导入了应用程序数据模式。这个包含嵌入模式的 WSDL 可以很好地与使用 ADB 或 JiBX 数据绑定的 WSDL2Java 工作,但是对于 JAXB,它将在模式处理期间引发一个异常抛出。将应用程序数据模式分离到一个单独的文件并在模式导入时指定文件名称,这将允许 WSDL2Java 使用 JAXB 绑定正确地处理模式。
更多精彩
赞助商链接