WSDL说明

来源:互联网 发布:加盟农村淘宝多少钱 编辑:程序博客网 时间:2024/06/07 01:46

WSDL 是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上,以最终定义具体部署的服务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。

WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用:消息,指对交换数据的抽象描述;而端口类型,指操作的抽象集合。用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。将Web访问地址与可再次使用的绑定相关联,可以定义一个端口,而端口的集合则定义为服务。
WSDL需要描述两部分的内容,一是接口,二是实现。
接口描述了服务的格式,例如服务名,服务参数,服务结果。
服务实现则描述了用户所对应提供的输入如何转换成符合某一实现协议的形式。一般情况下,我们使用SOAP作为实现协议,那么客户端在分析了WSDL文件以后,将会把用户的输入转换成SOAP请求。
 WSDL说明
            WSDL元素的对象结构示意图

 WSDL文件示例                  

<wsdl:definitions xmlns:xs="http://www.w3.org/2001/XMLSchema"

       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

       xmlns:tns="http://www.daily-moon.com/classifieds"

       xmlns:ns1="http://org.apache.axis2/xsd"

       targetNamespace="http://www.daily-moon.com/classifieds">

 <wsdl:types>

  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

         targetNamespace="http://org.apache.axis2/xsd"

         elementFormDefault="unqualified"

         attributeFormDefault="unqualified">

     <xs:element name="createNewAdRequest">

      <xs:complexType>

        <xs:sequence>

          <xs:element type="xs:string" name="content" />

          <xs:element type="xs:string" name="endDate" />

        </xs:sequence>

      </xs:complexType>

    </xs:element>

     <xs:element name="createNewAdResponse">

      <xs:complexType>

        <xs:sequence>

          <xs:element type="xs:int" name="newAdId" />

        </xs:sequence>

      </xs:complexType>

    </xs:element>

...

  </xs:schema>

 

</wsdl:types>

 <wsdl:message name="createNewAdRequestMessage">

  <wsdl:part name="part1"element="ns1:createNewAdRequest" />

</wsdl:message>

 <wsdl:message name="createNewAdResponseMessage">

  <wsdl:part name="part1" element="ns1:createNewAdResponse" />

</wsdl:message>

 <wsdl:message name="getExistingAdsResponseMessage">

...

</wsdl:message>

 <wsdl:portType name="ClassifiedServicePortType">

   <wsdl:operation name="createNewAd">

    <wsdl:input message="tns:createNewAdRequestMessage" />

    <wsdl:output message="tns:createNewAdResponseMessage" />

  </wsdl:operation>

   <wsdl:operation name="finalizeIssue">...</wsdl:operation>

  <wsdl:operation name="editExistingAd">...</wsdl:operation>

  <wsdl:operation name="getExistingAds">...</wsdl:operation>

 </wsdl:portType>

 <wsdl:binding name="ClassifiedServiceBinding"

              type="tns:ClassifiedServicePortType">

   <soap:binding transport="http://schemas.xmlsoap.org/soap/http"

                style="document" />

   <wsdl:operation name="createNewAd">

    <soap:operation soapAction="createNewAd" style="document" />

    <wsdl:input>

      <soap:body use="literal"

                 namespace="http://ws.apache.org/axis2" />

    </wsdl:input>

    <wsdl:output>

      <soap:body use="literal"

                 namespace="http://ws.apache.org/axis2" />

    </wsdl:output>

  </wsdl:operation>

   <wsdl:operation name="finalizeIssue">...</wsdl:operation>

  <wsdl:operation name="editExistingAd">...</wsdl:operation>

  <wsdl:operation name="getExistingAds">...</wsdl:operation>

 </wsdl:binding>

 <wsdl:service name="ClassifiedService">

  <wsdl:port name="ClassifiedServicePort"

             binding="tns:ClassifiedServiceBinding">

    <soap:address location=

"http://www.daily-moon.com:8080/axis2/services/ClassifiedService" />

  </wsdl:port>

</wsdl:service>

 </wsdl:definitions>

 注意:在WSDL 2.0中:

仅允许每个 message 包含一个 part;

portType 的名称已更改为 interface;

soapAction 已经完全从 WSDL 2.0 中删除了;

另一个更改与“消息交换模式”的正式规范有关。WSDL 2.0 不依赖于用户确定是同时存在输入和输出还是仅有一个输入消息,它允许您具体地声明所使用的模式

    ...

  <wsdl:operation name="finalizeIssue"

            pattern=http://www.w3.org/2006/01/wsdl/in-only">

    <wsdl:input message="tns:finalizeIssueRequestMessage" />

  </wsdl:operation>

  <wsdl:operation name="createNewAd"

              pattern="http://www.w3.org/2006/01/wsdl/in-out">

    <wsdl:input message="tns:createNewAdRequestMessage" />

    <wsdl:output message="tns:createNewAdResponseMessage" />

  </wsdl:operation>

...

 

--------------------------------------------

有关命名空间的说明

和许多编程语言一样,在 XML 中,经常有必要为各种元素和属性指定“命名空间”。这样就能方便地对具有相同名称但用途不同(来源也可能不同)的元素进行区分。XML 通过 URI 引用命名空间。例如,XML 模式命名空间为 http://www.w3.org/2001/XMLSchema。不过,为了方便起见,还为其分配了一个别名(或前缀)。例如,此处的模式命名空间的前缀为 xs:。请记住,别名只是一个别名而已,重要的是 URI。因此,属于 ns1: 命名空间的元素或属性也是模式的 targetNamespace 的一部分。

---------------------------------------------

一个WSDL文档里一般包含<types>、<message>、<portType>、<binding>和<service>这几个元素.

service 使用一个特殊的 binding,binding是 portType 的一个实现。portType 定义操作,而操作由 messages 组成。消息中包含由 types 部分中定义的 XML 组成。

  • Types - 定义Web服务里用到的,XML Schema定义的数据类型以外的自定义数据类型,对于我们自定义的类(Book),会对应到一个<complexType>,其中用<element>元素指定每个参数的类型。
  • JAX-RPC规范中规定了Java语言的数据类型到XML Schema数据类型的映射,例如int<->xsd:int、java.lang.String<->xsd:string等等,还有数组的映射方式。
  • Message - 具体定义了在通信中使用的消息的数据结构,Message元素包含了一组Part元素,每个Part元素都是最终消息的一个组成部分,每个Part都会引用一个DataType来表示它的结构。例如addBook()方法有一个Book类型的参数,则在WSDL中会有<part name="book" type="tns1:Book"/>的描述。
  • Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。
  • PortType - PortType具体定义了一种服务访问入口的类型,何谓访问入口的类型呢?就是传入/传出消息的模式及其格式。一个PortType可以包含若干个Operation,而一个Operation则是指访问入口支持的一种类型的调用。在WSDL里面支持四种访问入口调用的模式:
    1. 单请求;
    2. 单响应;
    3. 请求/响应;
    4. 响应/请求。

    在这里请求指的是从客户端到Web服务端,而响应指的是从Web服务端到客户端。PortType的定义中会引用消息定义部分的一个到两个消息,作为请求或响应消息的格式。比如,一个股票查询的访问入口可能就会支持两种请求消息,一种请求消息中指明股票代码,而另一种请求消息中则会指明股票的名称,响应消息可能都是股票的价格等等。

  • 我们看一个WSDL文档,一般就该先找<portType>元素,看看这个WSDL代表的Web服务里都有哪些方法,它们的参数和返回值是什么。这些方法是在<portType>里用<operation>元素表示的,<operation>可以有<input>和<output>子元素,表示方法的输入和输出。注意,方法可以是只有输入或只有输出的。

  • Binding- 包含了如何将抽象接口的元素(portType)转变为具体表示的细节,具体表示也就是指特定的数据格式和协议的结合;特定端口类型的具体协议和数据格式规范的绑定。JAX-RPC规范规定,SOAP绑定可以有rpc和document两种类型,分别表示远程过程调用和基于消息的方式。use属性可以是encoded或literal,对于前者要支持rpc的方式,对于后者要支持rpc和document的方式。

  • port- 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。

  • service- 描述的是一个具体的被部署的Web服务所提供的所有访问入口的部署细节,一个Service往往会包含多个服务访问入口,而每个访问入口都会使用一个Port元素来描述。

  • Port描述的是一个服务访问入口的部署细节,包括通过哪个Web地址(URL)来访问,应当使用怎样的消息调用模式来访问等。其中消息调用模式则是使用Binding结构来表示。Binding结构定义了某个PortType与某一种具体的网络传输协议或消息传输协议相绑定,从这一层次开始,描述的内容就与具体服务的部署相关了。比如可以将PortType与SOAP/HTTP绑定,也可以将PortType与MIME/SMTP相绑定等。

  • portType(与message和type元素的细节相结合)描述了Web服务是什么,binding元素描述了如何使用Web服务,port及service元素描述了Web服务的位置。

  • 在介绍了WSDL的主要元素之后,大家会发现,WSDL的设计理念完全继承了以XML为基础的当代Web技术标准的一贯设计理念:开放。WSDL允许通过扩展使用其他的类型定义语言(不光是XML Schema),允许使用多种网络传输协议和消息格式(不光是在规范中定义的这些:SOAP/HTTP,HTTP-GET/POST以及MIME等)。

原文地址:点击这里 进一步学习
0 0