Web 服务编程技巧和诀窍: 将 <xsd:any/> 元素用于自定义序列化
http://tech.ddvip.com 2008年08月21日 社区交流
内容摘要:也就是说,您不需要知道如何解析 XML 元素,如何将它交给适当的 Java 对象,反之亦然。然而,在某些情况下,您可能想掌握(反)序列化是如何实现的。或者您根本就不想将 XML 数据映射到 Java 对象中去。幸运的是,在 JAX-RPC 中就有办法能做到,本文将为您展示如何去做的技巧。
大多数情况下,JAX-RPC 假定出现在 SOAP 消息中的 XML 元素都应该映射到 Java 对象中去。对于简单类型和复杂类型如何映射各有其规则说明,JAX-RPC 实现通常都提供了生成处理映射所需代码的工具。好消息就是,如果您要处理应用程序中的 Java 对象,您不必担心数据的类型映射以及序列化和反序列化。也就是说,您不需要知道如何解析 XML 元素,如何将它交给适当的 Java 对象,反之亦然。然而,在某些情况下,您可能想掌握(反)序列化是如何实现的。或者您根本就不想将 XML 数据映射到 Java 对象中去。幸运的是,在 JAX-RPC 中就有办法能做到,本文将为您展示如何去做的技巧。
SOAP with Attachments API for Java(SAAJ)
JAX-RPC 规范依赖于 SAAJ 来处理 SOAP 消息的。SAAJ 定义了 SOAP 消息中各个部分的类与接口。首先介绍 javax.xml.soap.SOAPMessage 类,您可以通过这个类访问 javax.xml.soap.SOAPEnvelope 实例,紧接着又可以通过这个实例获取 javax.xml.soap.SOAPHeader 实例和 javax.xml.soap.SOAPBody 实例,等等。所有这些实例都是对 javax.xml.soap.SOAPElement 接口的扩展与继承,而这个接口本身也是对 W3C DOM Node 接口的扩展。
换句话说,SAAJ 给您提供了以 XML 为中心的角度来看待 SOAP 消息中的元素。JAX-RPC 将所有的消息处理都委托给了 SAAJ。请注意此处我并不打算全面地介绍 SAAJ,我只想讨论一些本文主题所需要的方面。
<xsd:any/> 元素
<xsd:any/> 元素是表示 XML 文档中任意 XML 内容的元素。顾名思义,它可以是任何一种 XML。这使您可以在 XML Schema 中创建复杂类型定义,而不用描述复杂类型的某些部分的具体结构。下面是一个示例(请参见 清单 1)展示了一个名为 Order 类型的定义。它包含两个普通元素和一个 <xsd:any/> 元素。
来源:developerWorks 作者:Andre Tost 责编:豆豆技术应用