- 浏览: 60164 次
- 性别:
- 来自: 广州
文章分类
最新评论
WSDL: Web Services Description Language 网页服务描述语言
详解WSDL文档元素:
文件是以XML格式定义的,内容分成了5大元素:
1、<types>:webservice使用的数据类型,它是独立以机器和语言的类型定义,这些数据类型被<message>标签所使用。
2、<message>:webservice使用的消息,它定义了webservice函数的参数。在webservice中输入参数和输出参数需要分开定义,使用不同的message标签体。message定义的输入输出参数,被<portType>标签使用。
3、<portType>:webservice执行操作。该标签引用<message>标签定义的函数来描述函数的签名(操作名、输入参数、输出参数)
4、<binding>:webservice通信协议。在portType中定义的每一项操作,都在此绑定中实现。
5、<service>:该标签定义每一绑定的端口地址。
WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的应用都可以实现。具体部分,如数据的序列化则归入底部分,因为它包含具体的定义。在上述的文档元素中,<types>、<message>、<portType>属于抽象定义层,<binding>、<service>属于具体定义层。所有的抽象可以是单独存在于别的文件中,也可以从主文档中导入。
WSDL文档一个实例:
<?xml version="1.0" encoding="UTF-8" ?> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://servicelifecycle.sample" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:ax21="http://bean.servicelifecycle.sample/xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://servicelifecycle.sample"> <wsdl:documentation>Library</wsdl:documentation> <wsdl:types> <xs:schema xmlns:ax22="http://bean.servicelifecycle.sample/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://servicelifecycle.sample"> <xs:import namespace="http://bean.servicelifecycle.sample/xsd" /> <xs:element name="returnBook"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="isbn" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="Exception"> <xs:sequence> <xs:element minOccurs="0" name="Exception" nillable="true" type="xs:anyType" /> </xs:sequence> </xs:complexType> <xs:element name="register"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="userName" nillable="true" type="xs:string" /> <xs:element minOccurs="0" name="passWord" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="registerResponse"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:boolean" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="login"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="userName" nillable="true" type="xs:string" /> <xs:element minOccurs="0" name="passWord" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="loginResponse"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:boolean" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="listLendBookResponse"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax22:Book" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="listAvailableBookResponse"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax22:Book" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="listAllBookResponse"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax22:Book" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="lendBook"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="isbn" nillable="true" type="xs:string" /> <xs:element minOccurs="0" name="userName" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="lendBookResponse"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="return" nillable="true" type="ax22:Book" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://bean.servicelifecycle.sample/xsd"> <xs:complexType name="Book"> <xs:sequence> <xs:element minOccurs="0" name="author" nillable="true" type="xs:string" /> <xs:element minOccurs="0" name="isbn" nillable="true" type="xs:string" /> <xs:element minOccurs="0" name="title" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> <wsdl:message name="loginRequest"> <wsdl:part name="parameters" element="ns:login" /> </wsdl:message> <wsdl:message name="loginResponse"> <wsdl:part name="parameters" element="ns:loginResponse" /> </wsdl:message> <wsdl:message name="lendBookRequest"> <wsdl:part name="parameters" element="ns:lendBook" /> </wsdl:message> <wsdl:message name="lendBookResponse"> <wsdl:part name="parameters" element="ns:lendBookResponse" /> </wsdl:message> <wsdl:message name="listAllBookRequest" /> <wsdl:message name="listAllBookResponse"> <wsdl:part name="parameters" element="ns:listAllBookResponse" /> </wsdl:message> <wsdl:message name="listLendBookRequest" /> <wsdl:message name="listLendBookResponse"> <wsdl:part name="parameters" element="ns:listLendBookResponse" /> </wsdl:message> <wsdl:message name="returnBookRequest"> <wsdl:part name="parameters" element="ns:returnBook" /> </wsdl:message> <wsdl:message name="registerRequest"> <wsdl:part name="parameters" element="ns:register" /> </wsdl:message> <wsdl:message name="registerResponse"> <wsdl:part name="parameters" element="ns:registerResponse" /> </wsdl:message> <wsdl:message name="listAvailableBookRequest" /> <wsdl:message name="listAvailableBookResponse"> <wsdl:part name="parameters" element="ns:listAvailableBookResponse" /> </wsdl:message> <wsdl:portType name="LibraryPortType"> <wsdl:operation name="login"> <wsdl:input message="ns:loginRequest" wsaw:Action="urn:login" /> <wsdl:output message="ns:loginResponse" wsaw:Action="urn:loginResponse" /> </wsdl:operation> <wsdl:operation name="lendBook"> <wsdl:input message="ns:lendBookRequest" wsaw:Action="urn:lendBook" /> <wsdl:output message="ns:lendBookResponse" wsaw:Action="urn:lendBookResponse" /> </wsdl:operation> <wsdl:operation name="listAllBook"> <wsdl:input message="ns:listAllBookRequest" wsaw:Action="urn:listAllBook" /> <wsdl:output message="ns:listAllBookResponse" wsaw:Action="urn:listAllBookResponse" /> </wsdl:operation> <wsdl:operation name="listLendBook"> <wsdl:input message="ns:listLendBookRequest" wsaw:Action="urn:listLendBook" /> <wsdl:output message="ns:listLendBookResponse" wsaw:Action="urn:listLendBookResponse" /> </wsdl:operation> <wsdl:operation name="returnBook"> <wsdl:input message="ns:returnBookRequest" wsaw:Action="urn:returnBook" /> </wsdl:operation> <wsdl:operation name="register"> <wsdl:input message="ns:registerRequest" wsaw:Action="urn:register" /> <wsdl:output message="ns:registerResponse" wsaw:Action="urn:registerResponse" /> </wsdl:operation> <wsdl:operation name="listAvailableBook"> <wsdl:input message="ns:listAvailableBookRequest" wsaw:Action="urn:listAvailableBook" /> <wsdl:output message="ns:listAvailableBookResponse" wsaw:Action="urn:listAvailableBookResponse" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="LibrarySoap11Binding" type="ns:LibraryPortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> <wsdl:operation name="login"> <soap:operation soapAction="urn:login" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="lendBook"> <soap:operation soapAction="urn:lendBook" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="register"> <soap:operation soapAction="urn:register" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="listAllBook"> <soap:operation soapAction="urn:listAllBook" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="returnBook"> <soap:operation soapAction="urn:returnBook" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> </wsdl:operation> <wsdl:operation name="listLendBook"> <soap:operation soapAction="urn:listLendBook" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="listAvailableBook"> <soap:operation soapAction="urn:listAvailableBook" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="LibrarySoap12Binding" type="ns:LibraryPortType"> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> <wsdl:operation name="login"> <soap12:operation soapAction="urn:login" style="document" /> <wsdl:input> <soap12:body use="literal" /> </wsdl:input> <wsdl:output> <soap12:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="lendBook"> <soap12:operation soapAction="urn:lendBook" style="document" /> <wsdl:input> <soap12:body use="literal" /> </wsdl:input> <wsdl:output> <soap12:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="register"> <soap12:operation soapAction="urn:register" style="document" /> <wsdl:input> <soap12:body use="literal" /> </wsdl:input> <wsdl:output> <soap12:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="listAllBook"> <soap12:operation soapAction="urn:listAllBook" style="document" /> <wsdl:input> <soap12:body use="literal" /> </wsdl:input> <wsdl:output> <soap12:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="returnBook"> <soap12:operation soapAction="urn:returnBook" style="document" /> <wsdl:input> <soap12:body use="literal" /> </wsdl:input> </wsdl:operation> <wsdl:operation name="listLendBook"> <soap12:operation soapAction="urn:listLendBook" style="document" /> <wsdl:input> <soap12:body use="literal" /> </wsdl:input> <wsdl:output> <soap12:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="listAvailableBook"> <soap12:operation soapAction="urn:listAvailableBook" style="document" /> <wsdl:input> <soap12:body use="literal" /> </wsdl:input> <wsdl:output> <soap12:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="LibraryHttpBinding" type="ns:LibraryPortType"> <http:binding verb="POST" /> <wsdl:operation name="login"> <http:operation location="Library/login" /> <wsdl:input> <mime:content type="text/xml" part="login" /> </wsdl:input> <wsdl:output> <mime:content type="text/xml" part="login" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="lendBook"> <http:operation location="Library/lendBook" /> <wsdl:input> <mime:content type="text/xml" part="lendBook" /> </wsdl:input> <wsdl:output> <mime:content type="text/xml" part="lendBook" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="register"> <http:operation location="Library/register" /> <wsdl:input> <mime:content type="text/xml" part="register" /> </wsdl:input> <wsdl:output> <mime:content type="text/xml" part="register" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="listAllBook"> <http:operation location="Library/listAllBook" /> <wsdl:input> <mime:content type="text/xml" part="listAllBook" /> </wsdl:input> <wsdl:output> <mime:content type="text/xml" part="listAllBook" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="returnBook"> <http:operation location="Library/returnBook" /> <wsdl:input> <mime:content type="text/xml" part="returnBook" /> </wsdl:input> </wsdl:operation> <wsdl:operation name="listLendBook"> <http:operation location="Library/listLendBook" /> <wsdl:input> <mime:content type="text/xml" part="listLendBook" /> </wsdl:input> <wsdl:output> <mime:content type="text/xml" part="listLendBook" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="listAvailableBook"> <http:operation location="Library/listAvailableBook" /> <wsdl:input> <mime:content type="text/xml" part="listAvailableBook" /> </wsdl:input> <wsdl:output> <mime:content type="text/xml" part="listAvailableBook" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="Library"> <wsdl:port name="LibraryHttpSoap11Endpoint" binding="ns:LibrarySoap11Binding"> <soap:address location="http://localhost:8088/axis2/services/Library.LibraryHttpSoap11Endpoint/" /> </wsdl:port> <wsdl:port name="LibraryHttpSoap12Endpoint" binding="ns:LibrarySoap12Binding"> <soap12:address location="http://localhost:8088/axis2/services/Library.LibraryHttpSoap12Endpoint/" /> </wsdl:port> <wsdl:port name="LibraryHttpEndpoint" binding="ns:LibraryHttpBinding"> <http:address location="http://localhost:8088/axis2/services/Library.LibraryHttpEndpoint/" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
理解这个WSDL文件结构可能要根据写的webservice程序结构来理解:
下面标红的地方都是元素之间引用的关系。
1.WSDL文档的根元素:
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ns1="http://org.apache.axis2/xsd"
xmlns:ns="http://servicelifecycle.sample"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:ax21="http://bean.servicelifecycle.sample/xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
targetNamespace="http://servicelifecycle.sample">
<definitions>定义了文档中用到的各个xml元素的namespace缩写,也界定了本文档自己的 targetNamespace="http://servicelifecycle.sample",这意味着其它的XML要引用当前XML中的元素时,要声明这个namespace。注意xmlns:ns="http://www.jsoso.com/wstest"这个声明,它标示了使用ns这个前缀指向自身的命名空间。
2.WSDL文档数据类型定义元素:<types>:
<wsdl:types>
<xs:schema xmlns:ax22="http://bean.servicelifecycle.sample/xsd"
attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://servicelifecycle.sample">
<xs:import namespace="http://bean.servicelifecycle.sample/xsd" />
<xs:element name="returnBook">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="isbn" nillable="true"
type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="login"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="userName" nillable="true" type="xs:string" /> <xs:element minOccurs="0" name="passWord" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="loginResponse"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:boolean" /> </xs:sequence> </xs:complexType> </xs:element>
这里定义webservice的一个元素名称returnBook,就是service的一个函数名称(见图),定义了混合类型数据类型,类型是string类型,名称叫isbn
3.WSDL文档消息体定义元素:< message >:
<wsdl:message name="loginRequest">
<wsdl:part name="parameters" element="ns:login" />
</wsdl:message>
<wsdl:message name="loginResponse">
<wsdl:part name="parameters" element="ns:loginResponse" />
</wsdl:message>
这里定义定义了消息请求,这里定义使用的消息是loginRequest和loginResponse,它分别引用了types中的login和loginResponse元素。在types中的login和loginResponse元素定义好了参数类型。有没有Response消息,主要是看你的函数是否有返回值,如果是void,想returnBook这函数就没有returnBookResponse。
4.WSDL文档操作定义元素:< portType >:
<wsdl:portType name="LibraryPortType">
<wsdl:operation name="login">
<wsdl:input message="ns:loginRequest" wsaw:Action="urn:login" />
<wsdl:output message="ns:loginResponse" wsaw:Action="urn:loginResponse" />
</wsdl:operation>
定义了操作名称login,输入使用的消息是loginRequest,Action是urn:login,输出ns:loginResponse,Action是:urn:loginResponse
5、WSDL文档操作绑定协议<binding>:
<wsdl:binding name="LibrarySoap11Binding" type="ns:LibraryPortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> <wsdl:operation name="login"> <soap:operation soapAction="urn:login" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation>
首先<binding>标签使用<soap:binding>的transport和style属性定义了Web Service的通讯协议HTTP和SOAP的请求风格RPC。其次<operation>子标签将portType中定义的 operation同SOAP的请求绑定,定义了操作名称soapAction,输出输入参数和异常的编码方式及命名空间。
如果客户端要调用这方法就要声明是这soapAction名称urn:login。
6、WSDL文档绑定服务端口地址<service>:
<wsdl:service name="Library"> <wsdl:port name="LibraryHttpSoap11Endpoint" binding="ns:LibrarySoap11Binding"> <soap:address location="http://localhost:8088/axis2/services/Library.LibraryHttpSoap11Endpoint/" /> </wsdl:port> <wsdl:port name="LibraryHttpSoap12Endpoint" binding="ns:LibrarySoap12Binding"> <soap12:address location="http://localhost:8088/axis2/services/Library.LibraryHttpSoap12Endpoint/" /> </wsdl:port> <wsdl:port name="LibraryHttpEndpoint" binding="ns:LibraryHttpBinding"> <http:address location="http://localhost:8088/axis2/services/Library.LibraryHttpEndpoint/" /> </wsdl:port> </wsdl:service>
这里描述webservice的服务名称是Library,service是一套<port>元素。在一一对应形式下,每个<port>元素都和一个location关联。如果同一个<binding>有多个<port>元素与之关联,可以使用额外的URL地址作为替换。
一个WSDL文档中可以有多个<service>元素,而且多个<service>元素十分有用,其中之一就是可以根据目标URL来组织端口。在一个 WSDL文档中,<service>的name属性用来区分不同的service。在同一个service中,不同端口,使用端口的"name"属性区分。
相关推荐
### WebService之WSDL文件详解 #### 一、WSDL概述 **Web Services Description Language (WSDL)**,即Web服务描述语言,是一种基于XML的格式,用于描述Web服务的接口和绑定,以及如何访问这些服务。WSDL允许将Web...
【WSDL详解(Webservice)】 Web服务描述语言(Web Services Description Language,简称WSDL)是一种基于XML的应用,主要用于描述Web服务的接口和其通信细节。WSDL文档定义了一组服务访问点,允许客户端通过这些点与...
**WebService描述语言WSDL详解** Web服务描述语言(Web Service Description Language,简称WSDL)是一种XML格式,用于定义网络服务的接口。它是构建基于SOAP(Simple Object Access Protocol)的Web服务的核心工具...
详细描述WebService中SOAP协议的规范,以及WSDL文件所需要包含的要素
### 生成WebService服务端的方法详解 #### 前言 在日常开发中,通常是由开发团队构建WebService服务端,客户端则通过服务端提供的WS-Definition Language (WSDL) 文件生成客户端代理并进行交互。但有时也会遇到特殊...
Web服务(WebService)是一种基于开放标准的,使得不同系统间能够进行互操作的网络应用程序。...通过观看"05.WebService核心之WSDL深入详解.wmv"这个视频,相信你能对WSDL有更深入的理解,并能应用于实际项目中。
"webservice soap wsdl" Web Service 是一种网络接口,为应用程序提供了交互和分布式处理的效果,与平台、开发语言无关。Web Service 的核心是 WSDL(Web Services Description Language),它是一种用于描述 Web ...
WebService描述语言WSDL是Web Service的一种重要组件,它提供了一种基于XML的描述服务的接口和消息的方法。WSDL文档描述了一个Web Service的接口,它包括一系列的抽象定义和具体定义,抽象定义与具体实现分离,有助...
WSDL文件是XML格式的文档,详细定义了服务的位置、使用的消息格式以及如何调用这些服务。这篇文章将深入探讨WSDL的重要性和其结构。 **为什么要使用WSDL?** WSDL的重要性在于它提供了标准化的方式来描述Web服务的...
Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同系统之间进行数据交换。在本实例中,我们将探讨三个关键概念:WSDL(Web Services Description Language)、SOAP(Simple Object Access ...
例如,一个WSDL文件可能定义了一个名为“Add”操作,接收两个数字并返回它们的和。 WSDL文档包含以下几个主要部分: 1. **服务定义**:指定服务的名称和端点(也称为SOAP地址或Endpoint),这是服务实际可供访问的...
### 示例及元素详解 - **Namespaces**:WSDL文档使用命名空间来避免元素名称的冲突,通常使用`http://schemas.xmlsoap.org/wsdl/`作为WSDL本身的命名空间。 - **SOAP消息**:WSDL可以描述SOAP消息的结构,包括...
PB11.5调用WSDL文件是PowerBuilder(PB)11.5版本中进行Web服务集成的关键操作。在PB环境中,通过WSDL(Web Services Description Language)文件,开发者可以与外部Web服务进行交互,实现数据交换和功能调用。以下...
WSDL文件中的元素如`<portType>`、`<operation>`、`<binding>`和`<service>`等,共同构建了服务的完整描述。例如,`<portType>`定义了服务的一组操作,而`<operation>`描述每个操作的名称、输入和输出消息。`...
### WebService WSDL结构分析详解 #### 一、WSDL定义与重要性 WSDL(Web Services Description Language),即Web服务描述语言,是一种基于XML的应用,用于定义一组服务访问点,使得客户端能够通过这些访问点对...