读书人

小弟我应该采用哪一种 WSDL 样式

发布时间: 2012-07-15 20:11:35 作者: rapoo

我应该采用哪一种 WSDL 样式?

Web 服务是通过 WSDL 文档来描述的。WSDL绑定描述了如何把服务绑定到消息传递协议(特别是 SOAP消息传递协议)。WSDL SOAP 绑定可以是 RPC样式的绑定,也可以是文档样式的绑定。同样,SOAP绑定可以有编码的用法,也可以有文字的用法。这给我们提供了四种样式/用法模型:

    RPC/编码RPC/文字文档/编码文档/文字

除了这些样式之外,还有一种样式也很常见,它称为文档/文字包装的样式,算上这一种,在创建WSDL文件时您就有了五种绑定样式可以从中选择。您应该选择哪一种呢?

对于本文的讨论,让我们从 清单1中的 Java方法开始,并且对其应用 JAX-RPC Java-to-WSDL 规则(请参见 参考资料)。

清单 1. Java方法

?

现在用“5”作为参数 x 的值来调用此方法。我们将发送一个与 清单3类似的 SOAP消息。

清单 3. 用于myMethod 的 RPC/编码的 SOAP 消息

关于前缀和名称空间的注意事项

为了简单起见,在本文的大部分 XML示例中,我省略了名称空间和前缀。不过,我还是使用了少数前缀,您可以假定它们是用下列名称空间进行定义的。

?

xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

对于这个RPC/编码的示例中的 WSDL 和 SOAP消息,有许多需要注意的事项:


小弟我应该采用哪一种 WSDL 样式
小弟我应该采用哪一种 WSDL 样式
回页首

?


小弟我应该采用哪一种 WSDL 样式
小弟我应该采用哪一种 WSDL 样式
回页首

?


小弟我应该采用哪一种 WSDL 样式
小弟我应该采用哪一种 WSDL 样式
回页首

?

<message name="myMethodRequest"> <part name="x" 关于消息组成部分的注意事项

我本来可以只更改绑定,就像我从 RPC/编码转到 RPC/所做的那样。它将是合法的WSDL。然而,WS-I 基本概要(WS-I Basic Profile)(请参见 参考资料)规定文档/文字的消息的组成部分引用元素而不是类型,所以我遵循了 WS-I(并且此处使用元素部分可以很好地把我们带到关于文档/文字包装的样式的讨论)。

下面是这种方法的优点和缺点:


小弟我应该采用哪一种 WSDL 样式
小弟我应该采用哪一种 WSDL 样式
回页首

?

</schema></types><message name="myMethodRequest"> <part name=" RPC/文字包装的样式?

从 WSDL的角度来看,没有理由只是把把包装的样式和文档/文字绑定联系在一起。它可以很容易地应用于RPC/文字绑定。但是这样做是相当不明智的。SOAP将包含操作的一个 myMethod 元素和元素名称的子 myMethod 元素。另外,即使它是一个合法的WSDL,RPC/文字元素部分也不遵循 WS-I。


小弟我应该采用哪一种 WSDL 样式
小弟我应该采用哪一种 WSDL 样式
回页首

?

关于重载的操作的注意事项

WSDL的下一个版本可能将不允许重载的操作。

WSDL允许重载的操作。但是当您添加包装的样式到 WSDL时,需要元素有与操作相同的名称,并且在 XML中不能有两个名称相同的元素。所以您必须采用文档/文字非包装的样式或某种 RPC样式。

?

根据这种节点定义,我们可以构造一个树形结构,它的根节点A 通过它左边和右边的的链接可以指向节点 B(请参见 图1)。


小弟我应该采用哪一种 WSDL 样式

发送数据图形的标准方式是使用 href标记,它是 RPC/编码的样式( 清单13)的一部分。


清单:13.RPC/编码的二进制树

在文字样式中,您可以通过各种方法构造图形,但是却没有标准的方法;所以您做的任何事情很可能不能与网络中其他端点上的服务进行互操作。

多态性

看一看 清单15中使用多态性Schema 的 WSDL。

清单
15.一个多态性 WSDL 的示例

?

当您把一个 dog 的实例传送给 train操作时,所生成的 SOAP消息必须包含类型编码信息,这样接收终端才能知道它所接收的是 animal的哪一个扩展(请参见 清单16)。这种类型编码信息可用在RPC/编码的样式中。

清单
16.一个多态性 SOAP 消息


小弟我应该采用哪一种 WSDL 样式
小弟我应该采用哪一种 WSDL 样式
回页首

?

小弟我应该采用哪一种 WSDL 样式

Russell Butek 是 IBM WebSphere Web服务引擎的一名开发人员。他同时也是 JAX-RPC Java Specification Request(JSR)专家组中 IBM的代表。他参与实现了 Apache 的 AXIS SOAP 引擎,并且推动 AXIS 1.0遵循 JAX-RPC 1.0。此前,他是 IBM CORBA ORB的一名开发人员和许多 OMG特别工作组(他担任职务)、核心特别工作组和互操作性特别工作组中 IBM的代表。您可以通过 butek at us.ibm.com与 Russell 联系。

读书人网 >开源软件

热点推荐