• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

xsd:any:幕后故事

发布: 2008-6-02 15:29 | 作者: 不详 | 来源: Russell Butek/developerWorks 中国 | 查看: 60次 | 进入软件测试论坛讨论

领测软件测试网

  最后,为了使用此服务,您必须将此 WSDL 映射到某个语言绑定。我将讨论一下 JAX-RPC 规范方面的情况。根据 JAX-RPC,xsd:any 映射到 javax.xml.soap.SOAPElement,而后者是在 SAAJ 规范中定义的类型。SAAJ 是与 DOM 类似的 API,用于访问 SOAP 消息中的 XML 实例。SAAJ 是一种用于访问 XML 实例数据的非常动态的低级别方法,不是特别友好。请参见清单 2,以查看清单 1 中的 WSDL 的 Java 接口。

  清单 2. 使用 xsd:any 的 WSDL 的 Java 接口

package any;

public interface Vet extends java.rmi.Remote {
    public void registerPet(javax.xml.soap.SOAPElement any)
        throws java.rmi.RemoteException;
}

  对于动态程序员而言,这可能是个非常好的映射,但我们其他人却宁愿使用生成的 Cat 和 Fish 类,也不愿使用 SOAPElement。如果可以直接将一个 Cat 或 Fish 放入 SOAPElement 中,这样也挺好,但没有特定于 SAAJ 的方式来进行此操作。JAX-RPC 规定 xsd:any 映射到 SOAPElement,但仍然未能提供用于在类实例和 SOAPElement 之间进行转换的方法。

  如果您习惯使用 DOM、SAX 或 SAAJ,则 xsd:any 对您而言就不是问题。不过您需要考虑一下您的 WDSL 的使用者的情况。仅由于您习惯这种级别的编程,您的 WSDL 的其他使用者是否也对此很熟悉呢?

  关于 xsd:anyType 的一些思考

  xsd:any 的一个替代方法是 xsd:anyType(请参阅清单 3 中的 WSDL——与清单 1 的不同之处在于使用粗体突出显示——和清单 4 中的 Java 接口)。xsd:anyType 的缺点在于 JAX-RPC 未为其定义映射。因此,即使有供应商映射此 XML 类型,您仍然无法编写使用该类型的可移植代码。虽然这样说,此类型仍然有一个优势,即一些供应商(如 IBM)将其映射到了 java.lang.Object 之类的有用类型。对于 WebSphere Application Server 的 SOAP 引擎,如果方法接受 java.lang.Object 类型的参数,则可以将任何 Java 对象发送到该方法,而且,只要该对象是符合 XML 标准的对象,就可以将其序列化到 SOAP 消息中。另一方面,如果接收端 SOAP 引擎知道如何将 XML 实例反序列化为 Java 对象,它就将进行此操作。如果引擎不知道如何反序列化该对象,接收方将获得一个 SOAPElement,和使用 xsd:any 时一样。

  请记住,尽管 xsd:anyType 看起来比 xsd:any 更好用,但缺乏 JAX-RPC 映射支持。只有在以下情况它才具有优势:

  您不担心代码是不可移植的。

  服务实现和该服务对应的客户机实现的基础平台具有针对 xsd:anyType 的某种映射。

  清单 3. 使用 xsd:anyType 的兽医服务 WSDL

<?xml version="1.0" encoding="UTF-8"?>
<definitions
    targetNamespace="urn:any"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="urn:any"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <schema

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

53/5<12345>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网