WSDL文件结构详解
WSDL解析
WSDL解析背景前⾯我们介绍过利⽤javassist动态⽣成webservice,这种⽅式可以使得我们系统通过页⾯配置动态发布webservice服务,做到0代码开发发布北向接⼝。
进⼀步思考,我们如何0代码开发调⽤第三⽅webservice服务呢?wsdl解析⾸先必然是理解第三⽅webservice的接⼝描述,也就是解析wsdl⽂件。
wsdl⽂件是webservice服务接⼝描述⽂档,⼀个wsdl⽂件可以包含多个接⼝,⼀个接⼝可以包含多个⽅法。
实际上,wsdl解析是⼗分困难的⼯作,⽹上也没有找到有效的解决办法,最终通过阅读SoapUI源码,找到了完美的解析⽅法。
代码1/**2 * WsdlInfo.java Create on 2013-5-4 下午12:56:143 *4 * 类功能说明: wsdl解析⼊⼝5 *6 * Copyright: Copyright(c) 20137 * Company: COSHAHO8 * @Version 1.09 * @Author 何科序10*/11public class WsdlInfo12 {13private String wsdlName;1415private List<InterfaceInfo> interfaces;1617/**18 * coshaho19 * @param path wsdl地址20 * @throws Exception21*/22public WsdlInfo(String path) throws Exception23 {24 WsdlProject project = new WsdlProject();25 WsdlInterface[] wsdlInterfaces = WsdlImporter.importWsdl( project, path );26this.wsdlName = path;27if(null != wsdlInterfaces)28 {29 List<InterfaceInfo> interfaces = new ArrayList<InterfaceInfo>();30for(WsdlInterface wsdlInterface : wsdlInterfaces)31 {32 InterfaceInfo interfaceInfo = new InterfaceInfo(wsdlInterface);33 interfaces.add(interfaceInfo);34 }35this.interfaces = interfaces;36 }37 }3839public String getWsdlName() {40return wsdlName;41 }4243public void setWsdlName(String wsdlName) {44this.wsdlName = wsdlName;45 }4647public List<InterfaceInfo> getInterfaces() {48return interfaces;49 }5051public void setInterfaces(List<InterfaceInfo> interfaces) {52this.interfaces = interfaces;54 }1/**2 *3 * InterfaceInfo.java Create on 2016年7⽉20⽇下午9:03:214 *5 * 类功能说明: 接⼝信息6 *7 * Copyright: Copyright(c) 20138 * Company: COSHAHO9 * @Version 1.010 * @Author 何科序11*/12public class InterfaceInfo13 {14private String interfaceName;1516private List<OperationInfo> operations;1718private String[] adrress;1920public InterfaceInfo(WsdlInterface wsdlInterface)21 {22this.interfaceName = wsdlInterface.getName();2324this.adrress = wsdlInterface.getEndpoints();2526int operationNum = wsdlInterface.getOperationCount();27 List<OperationInfo> operations = new ArrayList<OperationInfo>();2829for(int i = 0; i < operationNum; i++)30 {31 WsdlOperation operation = ( WsdlOperation )wsdlInterface.getOperationAt( i );32 OperationInfo operationInfo = new OperationInfo(operation);33 operations.add(operationInfo);34 }3536this.operations = operations;37 }3839public String getInterfaceName() {40return interfaceName;41 }4243public void setInterfaceName(String interfaceName) {44this.interfaceName = interfaceName;45 }4647public List<OperationInfo> getOperations() {48return operations;49 }5051public void setOperations(List<OperationInfo> operations) {52this.operations = operations;53 }5455public String[] getAdrress() {56return adrress;57 }5859public void setAdrress(String[] adrress) {60this.adrress = adrress;61 }62 }1/**2 *3 * OperationInfo.java Create on 2016年7⽉20⽇下午9:03:424 *5 * 类功能说明: ⽅法信息6 *7 * Copyright: Copyright(c) 20138 * Company: COSHAHO9 * @Version 1.010 * @Author 何科序11*/12public class OperationInfo13 {14private String operationName;1516private String requestXml;1718private String responseXml;20public OperationInfo(WsdlOperation operation)21 {22 operationName = operation.getName();23 requestXml = operation.createRequest( true );24 responseXml = operation.createResponse(true);25 }2627public String getOperationName() {28return operationName;29 }3031public void setOperationName(String operationName) {32this.operationName = operationName;33 }3435public String getRequestXml() {36return requestXml;37 }3839public void setRequestXml(String requestXml) {40this.requestXml = requestXml;41 }4243public String getResponseXml() {44return responseXml;45 }4647public void setResponseXml(String responseXml) {48this.responseXml = responseXml;49 }50 }测试代码1package com.coshaho.integration;23import com.coshaho.integration.wsdl.InterfaceInfo;4import com.coshaho.integration.wsdl.OperationInfo;5import com.coshaho.integration.wsdl.WsdlInfo;67/**8 *9 * WSDLParseTest.java Create on 2016年7⽉20⽇下午9:24:3610 *11 * 类功能说明: WSDL解析测试12 *13 * Copyright: Copyright(c) 201314 * Company: COSHAHO15 * @Version 1.016 * @Author 何科序17*/18public class WSDLParseTest19 {20public static void main(String[] args) throws Exception21 {22 String url = "/WebServices/ChinaOpenFundWS.asmx?wsdl";23 WsdlInfo wsdlInfo = new WsdlInfo(url);24 System.out.println("WSDL URL is " + wsdlInfo.getWsdlName());2526for(InterfaceInfo interfaceInfo : wsdlInfo.getInterfaces())27 {28 System.out.println("Interface name is " + interfaceInfo.getInterfaceName());29for(String ads : interfaceInfo.getAdrress())30 {31 System.out.println("Interface address is " + ads);32 }33for(OperationInfo operation : interfaceInfo.getOperations())34 {35 System.out.println("operation name is " + operation.getOperationName());36 System.out.println("operation request is ");37 System.out.println("operation request is " + operation.getRequestXml());38 System.out.println("operation response is ");39 System.out.println(operation.getResponseXml());40 }41 }42 }43 }测试结果1 WSDL URL is /WebServices/ChinaOpenFundWS.asmx?wsdl2 Interface name is ChinaOpenFundWSSoap123 Interface address is /WebServices/ChinaOpenFundWS.asmx4 operation name is getFundCodeNameDataSet5 operation request is6 operation request is <soap:Envelope xmlns:soap="/2003/05/soap-envelope" xmlns:web="/">7<soap:Header/>8<soap:Body>9<web:getFundCodeNameDataSet/>10</soap:Body>11</soap:Envelope>12 operation response is13<soap:Envelope xmlns:soap="/2003/05/soap-envelope" xmlns:web="/" xmlns:xs="/2001/XMLSchema"> 14<soap:Header/>15<soap:Body>16<web:getFundCodeNameDataSetResponse>17<!--Optional:-->18<web:getFundCodeNameDataSetResult>19<xs:schema>20<!--Ignoring type [{/2001/XMLSchema}schema]-->21</xs:schema>22<!--You may enter ANY elements at this point-->23</web:getFundCodeNameDataSetResult>24</web:getFundCodeNameDataSetResponse>25</soap:Body>26</soap:Envelope>27 operation name is getFundCodeNameString28 operation request is29 operation request is <soap:Envelope xmlns:soap="/2003/05/soap-envelope" xmlns:web="/">30<soap:Header/>31<soap:Body>32<web:getFundCodeNameString/>33</soap:Body>34</soap:Envelope>35 operation response is36<soap:Envelope xmlns:soap="/2003/05/soap-envelope" xmlns:web="/">37<soap:Header/>38<soap:Body>39<web:getFundCodeNameStringResponse>40<!--Optional:-->41<web:getFundCodeNameStringResult>42<!--Zero or more repetitions:-->43<web:string>?</web:string>44</web:getFundCodeNameStringResult>45</web:getFundCodeNameStringResponse>46</soap:Body>47</soap:Envelope>48 operation name is getOpenFundDataSet49 operation request is50 operation request is <soap:Envelope xmlns:soap="/2003/05/soap-envelope" xmlns:web="/">51<soap:Header/>52<soap:Body>53<web:getOpenFundDataSet>54<!--Optional:-->55<web:userID>?</web:userID>56</web:getOpenFundDataSet>57</soap:Body>58</soap:Envelope>59 operation response is60<soap:Envelope xmlns:soap="/2003/05/soap-envelope" xmlns:web="/" xmlns:xs="/2001/XMLSchema"> 61<soap:Header/>62<soap:Body>63<web:getOpenFundDataSetResponse>64<!--Optional:-->65<web:getOpenFundDataSetResult>66<xs:schema>67<!--Ignoring type [{/2001/XMLSchema}schema]-->68</xs:schema>69<!--You may enter ANY elements at this point-->70</web:getOpenFundDataSetResult>71</web:getOpenFundDataSetResponse>72</soap:Body>73</soap:Envelope>。
WSDL文档结构
WSDL文档结构WSDL文档可以分为两部分。
顶部分由抽象定义组成,而底部分则由具体描述组成。
抽象部分以独立于平台和语言的方式定义SOAP消息,它并不包含任何随机器或语言而变的元素。
这就定义了一系列服务,截然不同的网站都可以实现。
随网站而异的东西如序列化便归入底部分,因为它包含具体的定义。
l 抽象定义Types独立与机器和语言的类型定义Messages包括函数参数(输入与输出分开)或文档描述PortTypes引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)2 具体定义BindingsPortTypes部分的每一操作在此绑定实现Services确定每一绑定的端口地址图一:抽象定义和具体定义图中,箭头连接符代表文档不同栏之间的关系。
点和箭头代表了引用或使用关系。
双箭头代表"修改"关系。
3-D的箭头代表了包含关系。
这样,各Messages栏使用Types 栏的定义,PortTypes栏使用Messages栏的定义;Bindings栏引用了PortTypes栏,Services栏引用Bindings栏,PortTypes和Bindings栏包含了operation元素,而Services栏包含了port元素。
PortTypes栏里的operation元素由Bindings栏里的operation元素进一步修改或描述。
在此背景中,将使用标准的XML术语来描述WSDL文档。
Element是指XML的元素,而"attribute"指元素的属性。
于是:<element attribute="attribute-value">contents</element>内容也可能由一个或多个元素以递归的方式组成。
根元素是所有元素之中最高级的元素。
子元素总是从属于另一个元素,父元素。
注意,文档之中可能只有一个Types栏,或根本没有。
所有其他的栏可以只有零元素、单元素或是多元素。
WSDL—教程
什么是 WSDL?∙WSDL 指网络服务描述语言∙WSDL 使用 XML 编写∙WSDL 是一种 XML 文档∙WSDL 用于描述网络服务∙WSDL 也可用于定位网络服务∙WSDL 还不是 W3C 标准WSDL 可描述网络服务(Web Services)WSDL 指网络服务描述语言 (Web Services Description Language)。
WSDL 是一种使用 XML 编写的文档。
这种文档可描述某个 Web service。
它可规定服务的位置,以及此服务提供的操作(或方法)。
WSDL 文档结构WSDL 文档是利用这些主要的元素来描述某个 web service 的:元素定义<portType>web service 执行的操作<message>web service 使用的消息<types>web service 使用的数据类型<binding>web service 使用的通信协议一个 WSDL 文档的主要结构是类似这样的:<definitions><types>definition of types........</types><message>definition of a message....</message><portType>definition of a port.......</portType><binding>definition of a binding....</binding></definitions>WSDL 文档可包含其它的元素,比如 extension 元素,以及一个 service 元素,此元素可把若干个 web services 的定义组合在一个单一的 WSDL 文档中。
如需完整的语法概述,请访问 WSDL 语法这一节。
WebService 之 WSDL文件 讲解
WebService 之 WSDL文件讲解恩,我想说的是,是不是经常有人在开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户给你一个WSDL文件,说按照上面的进行适配,嘿嘿,这个时候,要是你以前没有开发过,肯定会傻眼,那如果你想学习的话,就认真的看下面的讲解咯:一、WSDL概述WebServices Description Language (WSDL Web服务语言)是一个用于精确描述Web Service 的文档格式。
WSDL非常适合于用作代码生成器,它能够读取WSDL文档,并且可以为访问Web服务生成一个程序化的接口,大多数软件供应商和主要的标准机构(包括 W3C、WS-I和OASIS)都支持WSDL。
例如:JAX-RPC provider(例如:BEA Weblogic)通过API用WSDL生成相应的占位程序;IBM WebSphere、以及Apache Axis都有自己的工具生成相关的代码。
下图是一个例子:上面的例子JAX-RPC通过读取WSDL文档,创建JAX-RPC RMI接口(endpoint接口)和实现此接口的网络占位程序(stub)。
客户端程序通过RMI接口,Stub和Web Service服务端交换SAOP消息。
二、WSDL基本结构WSDL文档是一个遵循WSDL XML模式的XML文档(文档实例);类似于:SOAP文档是一个遵循SOAP XML模式的XML文档(文档实例);一个WSDL文档的根元素是definitions元素,WSDL文档包含7个重要的元素:types, import, message, portType, operations, binding和service元素。
三、WSDL声明3.1 XML声明<?xml version="1.0" encoding="UTF-8"?>WSDL的声明必须定义成使用:UTF-8 或者UTF-16 编码。
python wsdl结构
python wsdl结构
摘要:
1.WSDL 简介
2.Python 与WSDL 的关系
3.WSDL 结构的组成部分
4.Python 中使用WSDL 的实例
正文:
1.WSDL 简介
WSDL(Web 服务描述语言)是一种用于描述Web 服务的XML 格式。
它定义了Web 服务的接口,数据类型,操作和消息传递模式。
WSDL 文件通常由服务提供商生成,并由服务消费者使用来生成客户端代码,以便与服务进行交互。
2.Python 与WSDL 的关系
Python 是一种广泛使用的编程语言,具有强大的网络编程和Web 服务支持。
Python 可以使用WSDL 描述的Web 服务,通过各种库和框架(例如SOAP,REST 等)实现与服务的交互。
在Python 中,WSDL 文件可以作为输入,生成Python 客户端代码,从而简化Web 服务的使用。
3.WSDL 结构的组成部分
WSDL 文件主要由以下几个部分组成:
- 定义(definitions):定义了Web 服务的接口,数据类型和操作。
- 类型(types):定义了Web 服务中使用的数据类型,包括结构体,复
杂类型和简单类型。
- 消息(messages):定义了Web 服务中传递的数据消息的结构和格式。
- 操作(operations):定义了Web 服务的具体功能,包括请求和响应的格式,以及处理请求所需的参数。
- 端点(endpoints):定义了Web 服务的访问地址和协议。
4.Python 中使用WSDL 的实例
在Python 中,可以使用`zeep`库来处理WSDL 文件。
如何看懂一个WSDL文档
如何看懂一个WSDL文档WSDL 指网络服务描述语言 (Web Services Description Language)。
一个WSDL文档是一个服务的描述,它描述了:服务名,服务地址,服务能用什么协议访问,服务有哪些方法,每个方法有几部分参数,每个参数的类型。
在一个WSDL文档中,你最经常看到的元素前缀会有wsdl、soap、xsd。
当然这些前缀是与命名空间URI对应的,前缀是可以自己定义的,或许与此不同,但大都这么定义。
WSDL在设计时,充分考虑了,各个元素模块的重用(好像一个类中定义了一些方法,可被不同方法共同调用)如:wsdl:binding、wsdl:portType、wsdl:message,你定义的这个元素可能被几个地方引用到。
所以WSDL设计者把它设计的够精简、灵活。
下面我基于WSDL 1.2 语法分别对三个命名空间的经常用到的元素解释一下:最好从下往上看//文档的根元素,表示这是一个服务的定义,在此定义中默认的名字空间URI 为“http://axisversion.sample”.<wsdl:definitions xmlns:axis2="http://axisversion.sample"xmlns:mime="/wsdl/mime/"xmlns:ns0="http://axisversion.sample/xsd"xmlns:soap12="/wsdl/soap12/"xmlns:http="/wsdl/http/"xmlns:ns1="http://org.apache.axis2/xsd"xmlns:xs="/2001/XMLSchema"xmlns:soap="/wsdl/soap/"xmlns:wsdl="/wsdl/"targetNamespace="http://axisversion.sample"><wsdl:documentation>This service is to get the running Axis version</wsdl:documentation>//为它表示所有消息中能使用的基本元素类型,如一个方法三个参数的其中一个参数的类型。
WSDL文件结构详解
WSDL文件结构详解WSDL(Web Services Description Language)是一种用于描述Web 服务的XML格式文件,它定义了服务的接口和消息格式。
WSDL文件的结构非常重要,它包含了用户和开发者需要了解的所有信息。
下面详细解释WSDL文件的结构。
3. 类型(Types):在定义元素中,类型元素定义了用于通信的消息的数据类型,它可以包含XML模式定义语言(XSD)的定义。
这些定义描述了Web服务请求和响应的数据结构。
4. 抽象(Abstract):在定义元素中,抽象元素定义了Web服务的操作。
每个抽象元素都描述了一个操作,包括输入消息和输出消息。
抽象元素是独立于具体协议的,也就是说,它描述的是服务接口,而不是具体的通信协议。
5. 绑定(Bindings):在定义元素中,绑定元素将抽象元素与具体的通信协议进行绑定。
它描述了如何将抽象操作映射到实际的请求和响应消息格式。
绑定元素通常包含一个或多个操作元素,每个操作元素定义一个特定的Web服务操作。
6. 服务(Services):在定义元素中,服务元素定义了Web服务的具体实例。
它包含一个或多个端口元素,每个端口元素定义了一个具体的网络终点。
每个端口元素都与一个特定的绑定元素相关联,这样可以将具体的消息格式和协议绑定到服务端点上。
7. 导入(Import):WSDL文件中可以使用导入元素引入其他WSDL 文件或XSD文件。
导入元素允许将多个文件组织在一起,以便更好地管理和维护。
总的来说,WSDL文件的结构主要包括命名空间定义、定义元素、类型元素、抽象元素、绑定元素、服务元素和导入元素。
这些元素之间的关系是层次化的,每个元素都有其特定的作用。
WSDL文件的结构非常重要,它提供了Web服务的所有信息,描述了服务的接口和消息格式。
通过使用WSDL文件,用户和开发者可以了解如何与Web服务进行交互,以及如何解析和构造消息。
因此,了解WSDL文件的结构对于理解和使用Web服务非常关键。
WSDL是一种描述网络服务(networkservice)的XML格式,
WSDL是一种描述网络服务(network service)的XML格式,网络服务是能对面向文档类型的信息和面向过程的信息进行操作的端点(endpoint)的集合。
对操作和消息的描述是抽象性的,并在定义端点时,将消息和操作绑定到具体的网络协议和消息格式上。
WSDL是可扩展的,它允许对端点和端点间的消息进行描述,同时不去考虑具体的消息格式或者双方用于通讯的网络协议。
一简介随着通讯协议和消息格式在WEB中的标准化,以某种格式化的方法描述通讯变得越来越重要并且其实现的可能性也越来越大。
WSDL通过定义一套XML的语法来描述网络服务的方式满足了这种需求。
WSDL把网络服务定义成一个能交换消息的通讯端点集(communication collection)。
WSDL服务为分布式系统提供了帮助文档,同时该服务也可作为自动实现应用间通讯的解决方案。
一个WSDL文档将服务定义为一个网络端点的集合,或者说端口的集合。
在WSDL里面,端点及消息的抽象定义与它们具体的网络实现和数据格式绑定是分离的。
这样就可以重用这些抽象定义:消息,需要交换的数据的抽象描述;端口类型,操作的抽象集合。
针对一个特定端口类型的具体协议和数据格式规范构成一个可重用的绑定。
一个端口定义成网络地址和可重用的绑定的联接,端口的集合定义为服务。
因此一个WSDL文档在定义网络服务的时候使用如下的元素:类型–使用某种的类型系统(比如XSD)定义数据类型的容器消息–通讯数据抽象的有类型的定义操作–服务支持的动作的抽象描述端口类型–一个操作的抽象集合,该操作由一个或多个端点支持绑定–针对一个特定端口类型的具体的协议规范和数据格式规范端口–一个单一的端点,定义成一个绑定和一个网络地址的联接服务–相关的端点的集合我们可以注意到WSDL并没有引入一种新的类型语言,这一点非常重要。
为了描述消息的结构,需要具有丰富类型的系统,WSDL意识到了这种需求,因此它支持XML的schema规范作为它的规范的类型系统。
WSDL教程
WSDL 教程WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言, (网络服务描述语言, 的语言, ) 以及如何对它们进行访问. 用于描述 Web Services 以及如何对它们进行访问.开始学习 WSDL!内容目录WSDL 简介 本章讲解 WSDL 的概念. WSDL 文档 本章讲解 WSDL 文档的主要部分. WSDL 端口 本章讲解 WSDL 端口界面 (WSDL port interface). WSDL 绑定 本章讲解 WSDL binding interface. WSDL 和 UDDI 本章讲解 UDDI 如何与 WSDL 进行整合. (UDDI: Universal Description Discovery and Integration.) WSDL 语法 在 W3C note 中被列出的完整的 WSDL 语法. WSDL 总结 本节向您推荐了在学习了 WSDL 教程之后,应该继续学习的内容.WSDL 简介WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言. 的语言.您应当具备的基础知识在继续学习之前,您需要对下面的知识有基本的了解: XML XML 命名空间 XML Schema如果您希望首先学习这些项目,请访问我们的 XML 系列教程.什么是 WSDL? WSDL 指网络服务描述语言 WSDL 使用 XML 编写 WSDL 是一种 XML 文档 WSDL 用于描述网络服务 WSDL 也可用于定位网络服务 WSDL 还不是 W3C 标准WSDL 可描述网络服务(Web Services) 可描述网络服务( )WSDL 指网络服务描述语言 (Web Services Description Language).WSDL 是一种使用 XML 编写的文档.这种文档可描述某个 Web service.它可规定服务的位置,以及 此服务提供的操作(或方法).在 W3C 的 WSDL 发展史在 2001 年 3 月,WSDL 1.1 被 IBM,微软作为一个 W3C 纪录(W3C note)提交到有关 XML 协 议的 W3C XML 活动,用于描述网络服务.(W3C 纪录仅供讨论.一项 W3C 纪录的发布并不代表它已被 W3C 或 W3C 团队亦或任何 W3C 成 员认可.)在 2002 年 7 月,W3C 发布了第一个 WSDL 1.2 工作草案.请在我们的 W3C 教程 阅读更多有关规范的状态及时间线.WSDL 文档WSDL 文档仅仅是一个简单的 XML 文档. 文档.的定义. 它包含一系列描述某个 web service 的定义.WSDL 文档结构WSDL 文档是利用这些主要的元素来描述某个 web service 的: 元素 定义 web service 执行的操作 web service 使用的消息 web service 使用的数据类型 web service 使用的通信协议<portType><message><types><binding>一个 WSDL 文档的主要结构是类似这样的:<definitions><types>definition of types........</types><message>definition of a message....</message><portType>definition of a port.......</portType><binding>definition of a binding....</binding></definitions>WSDL 文档可包含其它的元素, 比如 extension 元素, 以及一个 service 元素, 此元素可把若干个 web services 的定义组合在一个单一的 WSDL 文档中.如需完整的语法概述,请访问 WSDL 语法 这一节.WSDL 端口<portType> 元素是最重要的 WSDL 元素.它可描述一个 web service,可被执行的操作,以及相关的消息.可以把 <portType> 元素比作传统编程语言中的一个函数库(或一个模块,或一个类).WSDL 消息<message> 元素定义一个操作的数据元素.每个消息均由一个或多个部件组成.可以把这些部件比作传统编程语言中一个函数调用的参数.WSDL types<types> 元素定义 web service 使用的数据类型.为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型.WSDL Bindings<binding> 元素为每个端口定义消息格式和协议细节.WSDL 实例这是某个 WSDL 文档的简化的片段:<message name="getTermRequest"> <part name="term" type="xs:string"/> </message><message name="getTermResponse"><part name="value" type="xs:string"/> </message><portType name="glossaryTerms"> <operation name="getTerm"> <input message="getTermRequest"/> <output message="getTermResponse"/> </operation> </portType>在这个例子中, <portType> 元素把 "glossaryTerms" 定义为某个端口 端口的名称, "getTerm" 定义 把 端口 为某个操作 操作的名称. 操作操作 "getTerm" 拥有一个名为 "getTermRequest" 的输入消息 输入消息,以及一个名为 输入消息 "getTermResponse" 的输出消息 输出消息. 输出消息<message> 元素可定义每个消息的部件 部件,以及相关联的数据类型. 部件对比传统的编程, glossaryTerms 是一个函数库, "getTerm" 是带有输入参数 "getTermRequest" 而 和返回参数 getTermResponse 的一个函数.WSDL 端口WSDL 端口可描述由某个 web service 提供的界面(合法操作). 提供的界面(合法操作).WSDL 端口<portType> 元素是最重要的 WSDL 元素.它可描述一个 web service,可被执行的操作 操作,以及相关的消息 消息. 操作 消息端口定义了指向某个 web service 的连接点.可以把它元素比作传统编程语言中的一个函数库(或一个 模块,或一个类),而把每个操作比作传统编程语言中的一个函数.操作类型请求-响应是最普通的操作类型,不过 WSDL 定义了四种类型: 类型 定义 此操作可接受消息,但不会返回响应. 此操走可接受一个请求并会返回一个响应 此操作可发送一个请求,并会等待一个响应. 此造作可发送一条消息,但不会等待响应.One-wayRequest-responseSolicit-responseNotificationOne-Way 操作一个 one-way 操作的例子:<message name="newTermValues"> <part name="term" type="xs:string"/> <part name="value" type="xs:string"/> </message><portType name="glossaryTerms"> <operation name="setTerm"> <input name="newTerm" message="newTermValues"/> </operation></portType >在这个例子中,端口 "glossaryTerms" 定义了一个名为 "setTerm" 的 one-way 操作.这个 "setTerm" 操作可接受新术语表项目消息的输入,这些消息使用一条名为 "newTermValues" 的 消息,此消息带有输入参数 "term" 和 "value".不过,没有为这个操作定义任何输出.Request-Response 操作一个 request-response 操作的例子:<message name="getTermRequest"> <part name="term" type="xs:string"/> </message><message name="getTermResponse"> <part name="value" type="xs:string"/> </message><portType name="glossaryTerms"> <operation name="getTerm"> <input message="getTermRequest"/> <output message="getTermResponse"/> </operation> </portType>在这个例子中,端口 "glossaryTerms" 定义了一个名为 "getTerm" 的 request-response 操作."getTerm" 操作会请求一个名为 "getTermRequest" 的输入消息,此消息带有一个名为 "term" 的参 数,并将返回一个名为 "getTermResponse" 的输出消息,此消息带有一个名为 "value" 的参数.WSDL 绑定WSDL 绑定可为 web service 定义消息格式和协议细节. 定义消息格式和协议细节.绑定到 SOAP一个 请求 - 响应 操作的例子:<message name="getTermRequest"> <part name="term" type="xs:string"/> </message><message name="getTermResponse"> <part name="value" type="xs:string"/> </message><portType name="glossaryTerms"> <operation name="getTerm"> <input message="getTermRequest"/> <output message="getTermResponse"/> </operation> </portType><binding type="glossaryTerms" name="b1"> <soap:binding style="document" transport="/soap/http" /> <operation> <soap:operation soapAction="/getTerm"/> <input> <soap:body use="literal"/> </input><output> <soap:body use="literal"/> </output> </operation> </binding>binding 元素有两个属性 - name 属性和 type 属性.name 属性定义 binding 的名称,而 type 属性指向用于 binding 的端口,在这个例子中是 "glossaryTerms" 端口.soap:binding 元素有两个属性 - style 属性和 transport 属性.style 属性可取值 "rpc" 或 "document".在这个例子中我们使用 document.transport 属性定义了 要使用的 SOAP 协议.在这个例子中我们使用 HTTP.operation 元素定义了每个端口提供的操作符.对于每个操作,相应的 SOAP 行为都需要被定义.同时您必须如何对输入和输出进行编码.在这个例子 中我们使用了 "literal".WSDL 和 UDDIUDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索. 是一种目录服务, 进行注册和搜索.UDDI,英文为 "Universal Description, Discovery and Integration",可译为 通用描述, , 通用描述, ,可译为"通用描述 发现与集成服务". 发现与集成服务 .什么是 UDDI? ?UDDI 是一个独立于平台的框架,用于通过使用 Internet 来描述服务,发现企业,并对企业服务进行集 成. UDDI 指的是通用描述,发现与集成服务 UDDI 是一种用于存储有关 web services 的信息的目录. UDDI 是一种由 WSDL 描述的 web services 界面的目录. UDDI 经由 SOAP 进行通信 UDDI 被构建入了微软的 .NET 平台UDDI 基于什么? 基于什么?UDDI 使用 W3C 和 IETF* 的因特网标准,比如 XML,HTTP 和 DNS 协议.UDDI 使用 WSDL 来描述到达 web services 的界面此外,通过采用 SOAP,还可以实现跨平台的编程特性,大家知道,SOAP 是 XML 的协议通信规范,可 在 W3C 的网站找到相关的信息.*注释:IETF - Internet Engineering Task Force 注释: 注释UDDI 的好处任何规模的行业或企业都能得益于 UDDI.在 UDDI 之前,还不存在一种 Internet 标准,可以供企业为它们的企业和伙伴提供有关其产品和服务 的信息.也不存在一种方法,来集成到彼此的系统和进程中.UDDI 规范帮助我们解决的问题: 使得在成百万当前在线的企业中发现正确的企业成为可能 定义一旦首选的企业被发现后如何启动商业 扩展新客户并增加对目前客户的访问 扩展销售并延伸市场范围 满足用户驱动的需要,为在全球 Internet 经济中快速合作的促进来清除障碍UDDI 如何被使用假如行业发布了一个用于航班比率检测和预订的 UDDI 标准,航空公司就可以把它们的服务注册到一个 UDDI 目录中.然后旅行社就能够搜索这个 UDDI 目录以找到航空公司预订界面.当此界面被找到后, 旅行社就能够立即与此服务进行通信,这样由于它使用了一套定义良好的预订界面.谁在支持 UDDI? ?UDDI 是一个跨行业的研究项目, 由所有主要的平台和软件提供商驱动, 比如: Dell, Fujitsu, HP, Hitachi, IBM, Intel, Microsoft, Oracle, SAP, 以及 Sun, 它既是一个市场经营者的团体,也是一个电子商务的 领导者.已有数百家公司参与了这个 UDDI 团体.完整的 WSDL 语法语法已列在下面: 描述于 W3C 工作草案的完整 WSDL 1.2 语法已列在下面:<wsdl:definitions name="nmtoken"? targetNamespace="uri"><import namespace="uri" location="uri"/> *<wsdl:documentation .... /> ?<wsdl:types> ? <wsdl:documentation .... /> ? <xsd:schema .... /> * </wsdl:types><wsdl:message name="ncname"> * <wsdl:documentation .... /> ? <part name="ncname" element="qname"? type="qname"?/> * </wsdl:message><wsdl:portType name="ncname"> * <wsdl:documentation .... /> ? <wsdl:operation name="ncname"> * <wsdl:documentation .... /> ? <wsdl:input message="qname"> ? <wsdl:documentation .... /> ? </wsdl:input> <wsdl:output message="qname"> ? <wsdl:documentation .... /> ? </wsdl:output><wsdl:fault name="ncname" message="qname"> * <wsdl:documentation .... /> ? </wsdl:fault> </wsdl:operation> </wsdl:portType><wsdl:serviceType name="ncname"> * <wsdl:portType name="qname"/> + </wsdl:serviceType><wsdl:binding name="ncname" type="qname"> * <wsdl:documentation .... /> ? <-- binding details --> * <wsdl:operation name="ncname"> * <wsdl:documentation .... /> ? <-- binding details --> * <wsdl:input> ? <wsdl:documentation .... /> ? <-- binding details --> </wsdl:input> <wsdl:output> ? <wsdl:documentation .... /> ? <-- binding details --> * </wsdl:output> <wsdl:fault name="ncname"> * <wsdl:documentation .... /> ? <-- binding details --> * </wsdl:fault> </wsdl:operation> </wsdl:binding><wsdl:service name="ncname" serviceType="qname"> * <wsdl:documentation .... /> ? <wsdl:port name="ncname" binding="qname"> * <wsdl:documentation .... /> ? <-- address details --> </wsdl:port> </wsdl:service></wsdl:definitions>总 结 您已经学习了 WSDL,下一步呢? ,下一步呢?WSDL 概要本教程已为您讲解了如何创建可描述 web 服务的 WSDL 文档.它也规定了服务的位置和服务所提供的 操作(或方法).您已经学习到如何为 web 服务定义消息格式和协议细节.您也学习了可通过 UDDI 来注册和搜索 web 服务.您已经学习了 WSDL,下一步呢? ,下一步呢?下一步应该学习 SOAP 和 Web Services.SOAP SOAP 是一种基于 XML 的简易协议,允许应用程序通过 HTTP 来交换信息.或者更简单地讲,SOAP 是用于访问 web 服务的协议.如果您希望学习更多有关 SOAP 的知识,请访问我们的 SOAP 教程.Web Services Web services 可把您的应用程序转换为 web 应用程序.通过使用 XML,可以在应用程序间传送消息.如果您希望学习更多有关 Web services 的知识,请访问我们的 Web services 教程.。
WSDL的原理
WSDL的原理WSDL,全称为Web Services Description Language,是Web服务的描述语言,通常用来描述Web服务的功能及其使用的协议。
它可以帮助软件开发者更轻松地创建、发布、调用和使用Web服务。
WSDL是基于XML的,它用来表示如何调用Web服务,也就是说,它提供了一种描述和配置Web服务的方式。
它由多个部分组成,包括描述所支持的Web服务功能的信息,以及支持这些功能的协议和格式信息等。
WSDL在软件开发过程中扮演着重要的角色,它可以帮助开发者明确Web服务的接口,从而更容易的实现Web服务的调用和使用。
WSDL 的使用可以降低开发者开发Web服务的时间和成本,同时也可以简化一个Web服务的使用。
从技术层面上来说,WSDL从一个抽象的角度提供了一个接口的定义,通过这个接口,软件开发者可以更方便地调用Web服务,而无需了解其底层的实现细节。
WSDL文件由三个元素组成:messages、portType和binding,其中,messages表示服务消息,portType代表要调用的服务,binding指定用哪种协议和数据格式调用服务。
WSDL由两个部分组成:抽象部分(Abstract WSDL)和具体部分(Concrete WSDL)。
抽象部分用来定义描述服务和操作,它是一种抽象层次的概念,对底层实现没有约束。
具体部分则是具体描述抽象部分受支持的协议、端口、地址等信息,它能够更多地描述抽象部分,也就是说,它能够具体描述抽象部分要提供的相关服务,以及服务操作所用的协议、数据格式等。
WSDL还提供了一种可扩展的描述机制,能够很好地支持Web服务的发现、发布和使用。
WSDL的可扩展性源于它的灵活的XML接口和消息结构,它甚至允许软件开发者根据自己的需求来定制自己所需要的描述信息。
WSDL为Web服务的发布、分发和发现提供了一种非常有效的解决方案,它能够提供一致的接口定义和协议,使开发者可以更容易的发现和访问被发布的Web服务。
wsdl标准
wsdl标准
WSDL(Web Services Description Language)是一种用于描述网络服务的标准,它使用XML 格式来定义Web 服务的接口和消息格式。
WSDL 提供了一种统一的方式,使得不同平台、不同技术栈的应用程序可以相互通信和交互。
以下是WSDL 的一些关键特点和组成部分:
1. 接口描述:WSDL 文件定义了Web 服务的接口,包括可调用的操作和消息的结构。
它描述了每个操作的输入参数、输出结果以及可能出现的错误信息。
2. 协议绑定:WSDL 可以与具体的传输协议进行绑定,例如SOAP、HTTP、SMTP 等。
通过指定协议绑定,可以告知客户端如何与服务进行通信。
3. 消息格式:WSDL 定义了Web 服务的消息格式,使用XML 架构描述数据结构。
它指定了输入和输出消息的元素、类型和顺序,以便客户端和服务端能够正确解析和处理消息。
4. 服务地址:WSDL 文件中包含了Web 服务的地址信息,指示客户端可以通过哪个URL 来访问该服务。
5. 扩展机制:WSDL 支持扩展机制,允许开发人员自定义和扩展标准的WSDL 描述。
这样可以为特定领域或需求定制更具体的描述。
总之,WSDL 是一种用于描述Web 服务接口、消息和协议的标准,它提供了一种规范的方式,使得不同平台和技术的应用程序能够互相理解和交互。
1。
wsdl文件用法
wsdl文件用法WSDL文件的用途WSDL文件(Web Services Description Language)是一种用于描述Web服务的XML格式文件。
它定义了如何访问Web服务以及Web服务提供的功能和参数。
下面是WSDL文件的一些常见用法及详细解释:描述Web服务的接口和操作•WSDL文件用于描述Web服务的接口,包括输入和输出消息的结构和类型。
它定义了Web服务的可用方法、操作以及它们的输入和输出参数。
通过WSDL文件,开发人员可以清楚地了解Web服务提供的功能,并按照指定的参数和格式进行调用。
指定Web服务的绑定和协议•WSDL文件可以指定Web服务使用的协议和绑定。
它可以描述Web 服务的传输协议(如HTTP、SOAP等)以及与之相关的绑定细节(如SOAP消息结构、编码方式等)。
通过WSDL文件,开发人员可以了解可以与Web服务进行交互的协议和细节,从而进行相应的配置和集成。
自动生成Web服务客户端和代理类•基于WSDL文件,开发人员可以使用各种工具自动生成Web服务客户端和代理类。
这些工具可以根据WSDL文件的定义,自动生成与Web服务一致的客户端代码,使得开发人员可以方便地使用各种编程语言进行Web服务的调用和开发。
支持Web服务的自动发现和注册•WSDL文件通过描述Web服务的位置、功能和参数,支持Web服务的自动发现和注册。
通过WSDL文件,开发人员可以了解Web服务的位置和提供者,从而可以自动发现可用的Web服务,并将其注册到相应的服务目录或注册中心中,使得其他应用程序可以方便地访问和使用这些Web服务。
提供Web服务的文档和说明•WSDL文件可以作为Web服务的文档和说明,提供详细的描述和说明。
它可以包含关于Web服务的各种元数据、操作的描述、参数的说明等内容。
通过WSDL文件,开发人员和用户可以了解Web服务的功能、使用方法和参数等,从而可以更好地使用和集成这些Web服务。
wsdl文件结构分析
wsdl文件结构分析WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。
WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。
相关的具体部署的服务访问点通过组合就成为抽象的Web服务。
本文将详细讲解WSDL文档的结构,并分析每个元素的作用。
一:WSDL定义WSDL是一个用于精确描述Web服务的文档,WSDL文档是一个遵循WSDL XML 模式的XML文档。
WSDL 文档将Web服务定义为服务访问点或端口的集合。
在 WSDL 中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用:消息,指对交换数据的抽象描述;而端口类型,指操作的抽象集合。
用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。
将Web访问地址与可再次使用的绑定相关联,可以定义一个端口,而端口的集合则定义为服务。
一个WSDL文档通常包含7个重要的元素,即types、import、message、portType、operation、binding、 service元素。
这些元素嵌套在definitions 元素中,definitions是WSDL文档的根元素。
文章的下一部分将会详细介绍WSDL 的基本结构。
二:WSDL的基本结构--概述如第一部分最后描述的那样,一个基本的WSDL文档包含7个重要的元素。
下面将分别介绍这几个元素以及他们的作用。
WSDL 文档在Web服务的定义中使用下列元素:· Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。
WSDL详解
WSDL详解(一)2011-03-25 13:43:57标签:WSDL休闲职场WSDL文档使用web服务描述语言来定义服务。
文档包括逻辑(抽象)部分和具体部分。
抽象部分用于定义独立于实现的数据类型和消息,具体部分定义一个endpoint如何实现一个可以与外界进行交互的服务。
通常建议在写代码前定义WSDL文档和XML schema,但是这就要求对WSDL非常熟悉。
逻辑部分:包括types,message以及portType元素。
types元素中,xml schema用来定义组成消息的数据的结构。
一定数量的消息元素用来定义服务所用消息的格式。
portType元素包括一个或多个operation元素,用来定义被operation发送的消息。
具体部分:包括binding和service元素。
binding元素描述message元素描述的那些数据单元如何映射到一个具体的数据格式。
Service元素包括一个或多个port元素,这些port元素用于定义endpoint。
总体上来说,一个WSDL文档有以下元素组成:definitions--WSDL文档的根元素,该元素的属性指明了wsdl文档的名称,文档的目标名字空间,以及WSDL文档应用的名字空间的速记定义。
types--数据单元的xml样式定义,形成了服务所用消息的构建块。
portType---描述服务逻辑接口的operation元素的集合。
operation--一个服务包含的操作的描述,当操作被调用时,操作被定义为两个endpoint之间的消息传递。
binding---一个endpoint的实际数据格式说明,一个binding元素定义如何将一个抽象消息映射到一个具体数据格式。
该元素指明诸如参数顺序,返回值等信息。
service---相关port元素的集合,这些元素被库藏,用户组织endpoint定义。
port--通过binding和物理地址定义的endpoint,这个元素将所有抽象定义聚集在一起。
wsdl
<service>和<port>元素 ※service是一套<port>元素。 ※一个WSDL文档中可以有多个<service>元素。 <definitions…>… <service name="FOOService“> <port name="fooSamplePort" binding="fooSampleBinding“> <soap:address location="http://localhost:8080/Sample"/> </port> <port …>…</port> … </service> …</definitions> 在一个WSDL文档中,<service>的name属性用来区分不同的service。
//web service服务定义
一、WSDL 文档结构
• 一个 WSDL 文档的主要结构是类似这样的:
ISample.java Interface ISample { string foo(int arg0,SmartCard arg1) ; } Interface ISample { string foo(int arg0,SmartCard arg1) ; }
wsdl头部结构:
<?xml version=“1.0” encoding=“UTF-8” ?> <definitions name=“anyNameIsOk” targetNamespace=“http://packageNameReversed” xmlns:tns=http://packageNameReversed xmlns:xsd=“/2001/XMLSchema” xmlns:soap=“/wsdl/soap/” xmlns="org/wsdl/"> -<type name=“…”>…</type> -<message name=“…”>…</message>* -<portType name=“…”>…</portType> -<binding name=“…”>…</binding> -<service >…<service> </definitions>
WSDL实例解析
转自/blog/383456WSDL的主要文档元素WSDL文档可以分为两部分。
顶部分由抽象定义组成,而底部分则由具体描述组成。
抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。
这就定义了一系列服务,截然不同的应用都可以实现。
具体部分,如数据的序列化则归入底部分,因为它包含具体的定义。
在上述的文档元素中,<types>、<message>、<portType>属于抽象定义层,<binding>、<service>属于具体定义层。
所有的抽象可以是单独存在于别的文件中,也可以从主文档中导入。
WSDL文档的结构实例解析下面我们将通过一个实际的WSDL文档例子来详细说明各标签的作用及关系。
Wsdl代码1.<?xml version="1.0" encoding="UTF-8"?>2.<definitions3.xmlns:soap="/wsdl/soap/"4.xmlns:tns="/wstest"5.xmlns:xsd="/2001/XMLSchema"6.xmlns="/wsdl/"7.targetNamespace="/wstest"="Example">9.<types>10.<xsd:schema>11.<xsd:importspace="/wstest"13.schemaLocation="http://localhost:8080/hello?xsd=1"></xsd:import>14.</xsd:schema>15.</types>16.<message name="toSayHello">17.<part name="userName" type="xsd:string"></part>18.</message>19.<message name="toSayHelloResponse">20.<part name="returnWord" type="xsd:string"></part>21.</message>22.<message name="sayHello">23.<part name="person" type="tns:person"></part>24.<part name="arg1" type="xsd:string"></part>25.</message>26.<message name="sayHelloResponse">27.<part name="personList" type="tns:personArray"></part>28.</message>29.<message name="HelloException">30.<part name="fault" element="tns:HelloException"></part>31.</message>32.<portType name="Example">33.<operation name="toSayHello" parameterOrder="userName">34.<input message="tns:toSayHello"></input>35.<output message="tns:toSayHelloResponse"></output>36.</operation>37.<operation name="sayHello" parameterOrder="person arg1">38.<input message="tns:sayHello"></input>39.<output message="tns:sayHelloResponse"></output>40.<fault message="tns:HelloException" name="HelloException"></fault>41.</operation>42.</portType>43.<binding name="ExamplePortBinding" type="tns:Example">44.<soap:binding45.transport="/soap/http"46.style="rpc"></soap:binding>47.<operation name="toSayHello">48.<soap:operation soapAction="sayHello"></soap:operation>49.<input>50.<soap:body use="literal"space="/wstest"></soap:body>52.</input>53.<output>54.<soap:body use="literal"space="/wstest"></soap:body>56.</output>57.</operation>58.<operation name="sayHello">59.<soap:operation soapAction="sayHello"></soap:operation>60.<input>61.<soap:body use="literal"space="/wstest"></soap:body>63.</input>64.<output>65.<soap:body use="literal"space="/wstest"></soap:body>67.</output>68.<fault name="HelloException">69.<soap:fault name="HelloException" use="literal"></soap:fault>70.</fault>71.</operation>72.</binding>73.<service name="Example">74.<port name="ExamplePort" binding="tns:ExamplePortBinding">75.<soap:address location="http://localhost:8080/hello"></soap:address>76.</port>77.</service>78.</definitions>由于上面的事例XML较长,我们将其逐段分解讲解WSDL文档的根元素:<definitions>Xml代码1.<definitions2.xmlns:soap="/wsdl/soap/"3.xmlns:tns="/wstest"4.xmlns:xsd="/2001/XMLSchema"5.xmlns="/wsdl/"6.targetNamespace="/wstest"="Example">8.……9.……10.</definitions><definitions>定义了文档中用到的各个xml元素的namespace缩写,也界定了本文档自己的 targetNamespace="/wstest",这意味着其它的XML要引用当前XML中的元素时,要声明这个namespace。
wsdl深入理解
现在,简单解释一下《使用Axis发布简单的Web服务》中发布的Web服务所对应WSDL 文档的内容和结构。
请注意,同样的Java类在不同的Web服务开发包中得到的WSDL文档不一定完全相同,这里还是以使用Axis的情况作为例子。
虽然比较长,但为了方便起见还是把完整的WSDL贴在下面,然后进行说明。
由于我对Web 服务的认识还很不够,所以几乎可以肯定会存在一些误解,仅作参考。
<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions targetNamespace="http://localhost:8080/bookstore/services/ BookSvc"xmlns="http://schem /wsdl/"/*缺省的名称空间*/xmlns:apachesoap="/xml-soap"xmlns:impl="http://localhost:8080/bookstore/services/BookSvc"xmlns:intf="http://localhost:8080/bookstore/services/BookSvc"xmlns:soapenc="http://schem /soap/encoding/"xmlns:tns1="http://m "xmlns:wsdl="http://schem /wsdl/"xmlns:wsdlsoap="http://schem /wsdl/soap/"xmlns:xsd="/2001/XMLSchem a"><wsdl:types><schem a targetNamespace="http://m " xmlns="http://w /2001/XMLSchem a"><import nam espace="http://schem /soap/encoding/"/><com plexType nam e="Book"><sequence><element nam e="ISDN" nillable="true" type="xsd:string"/><element nam e="nam e" nillable="t rue" type="xsd:string"/><element nam e="page" type="xsd:int"/></sequence></com plexType></Schem a></wsdl:types><wsdl:message name="addBookResponse"></wsdl:message><wsdl:message name="addBookRequest"><wsdl:part nam e="book" type="tns1:Book"/></wsdl:message><wsdl:portType nam e="BookSvc"><wsdl:operation name="addBook" parameterOrder="book"><wsdl:input m essage="intf:addBookRequest" name="addBookRequest"/><wsdl:output m essage="intf:addBookResponse" name="addBookResponse" /></wsdl:operation></wsdl:portType><wsdl:binding name="BookSvcSoapBinding" type="intf:BookSvc"><wsdlsoap:binding style="rpc" transport="http://schem /soap /http"/><wsdl:operation name="addBook"><wsdlsoap:operation soapAction=""/><wsdl:input nam e="addBookRequest"><wsdlsoap:body encodingStyle="http://schem /soap/encodi ng/" namespace="" use="encoded"/></wsdl:input><wsdl:output name="addBookResponse"><wsdlsoap:body encodingStyle="http://schem /soap/encodi ng/" namespace="http://localhost:8080/bookstore/services/BookSvc" use="enco ded"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service nam e="BookSvcService"><wsdl:port binding="intf:BookSvcSoapBinding" name="BookSvc"><wsdlsoap:address location="http://localhost:8080/bookstore/services/Boo kSvc"/></wsdl:port></wsdl:service></wsdl:definitions>每个WSDL的根元素都是<definitions>,一般都在这里定义文档中的各种名称空间。
第七章 WSDL
7.2 WSDL 文档结构
文档的主要元素
元素 <portType> <message> <types> <binding> 定义 web service 执行的操作 web service 使用的消息 web service 使用的数据类型 web service 使用的通讯协议
文档结构
import元素
• import元素使得可以在当前的WSDL文档中 使用其他Schema或WSDL文档中指定的命 名空间中定义的元素。它经常被用在模块 化的WSDL文档。import的格式如下:
<wsdl:import namespace=URI location=URI/>
• 必须有namespace属性和location属性:
ProgramService.wsdl
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:wsdl="/wsdl/" xmlns:soap="/wsdl/soap/" xmlns:http="/wsdl/http/" xmlns:xs="/2001/XMLSchema" xmlns:soapenc="/soap/encoding/" xmlns:mime="/wsdl/mime/" xmlns:tns="/PPMS/services/ProgramService" xmlns:ns="/PPMS/messages/ProgramService" xmlns:ns2="/esb/messagehead/1.0" targetNamespace="/PPMS/services/ProgramService"> …… </wsdl:definitions>
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
wsdl文件结构分析WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。
WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。
相关的具体部署的服务访问点通过组合就成为抽象的Web服务。
本文将详细讲解WSDL文档的结构,并分析每个元素的作用。
一:WSDL定义WSDL是一个用于精确描述Web服务的文档,WSDL文档是一个遵循WSDL XML模式的XML文档。
WSDL 文档将Web服务定义为服务访问点或端口的集合。
在 WSDL 中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用:消息,指对交换数据的抽象描述;而端口类型,指操作的抽象集合。
用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。
将Web访问地址与可再次使用的绑定相关联,可以定义一个端口,而端口的集合则定义为服务。
一个WSDL文档通常包含7个重要的元素,即types、import、message、portType、operation、binding、 service元素。
这些元素嵌套在definitions 元素中,definitions是WSDL文档的根元素。
文章的下一部分将会详细介绍WSDL 的基本结构。
二:WSDL的基本结构--概述如第一部分最后描述的那样,一个基本的WSDL文档包含7个重要的元素。
下面将分别介绍这几个元素以及他们的作用。
WSDL 文档在Web服务的定义中使用下列元素:· Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。
· Message - 通信消息的数据结构的抽象类型化定义。
使用Types所定义的类型来定义整个消息的数据结构。
· Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。
· PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。
· Binding - 特定端口类型的具体协议和数据格式规范的绑定。
· Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
· Service- 相关服务访问点的集合。
WSDL的xml schema可以参照如下网址:/wsdl/三:WSDL的基本结构--详述本节将通过一个例子详细描述WSDL文档每个元素的作用。
下面一个例子是一个简单的WSDL文档的内容。
一个简单的Web Service的WSDL文档,该服务支持名为sayHello的唯一操作,该操作通过在http上运行SOAP协议来实现的。
该请求接受一个字符串name,经过处理后返回一个简单的字符串。
文档如下:Xml代码1.<?xml version="1.0"encoding="UTF-8"?>2.<wsdl:definitions3.targetNamespace="http://com.liuxiang.xfireDemo/HelloService"4.xmlns:tns="http://com.liuxiang.xfireDemo/HelloService"5.xmlns:wsdlsoap="/wsdl/soap/"6.xmlns:soap12="/2003/05/soap-envelope"7.xmlns:xsd="/2001/XMLSchema"8.xmlns:soapenc11="/soap/encoding/"9.xmlns:soapenc12="/2003/05/soap-encoding"10. xmlns:soap11="/soap/envelope/"11. xmlns:wsdl="/wsdl/">12. <wsdl:types>13. <xsd:schema xmlns:xsd="/2001/XMLSchema"14. attributeFormDefault="qualified"elementFormDefault="qualified"15. targetNamespace="http://com.liuxiang.xfireDemo/HelloService">16. <xsd:element name="sayHello">17. <xsd:complexType>18. <xsd:sequence>19. <xsd:element maxOccurs="1"minOccurs="1"20. name="name"nillable="true"type="xsd:string"/>21. </xsd:sequence>22. </xsd:complexType>23. </xsd:element>24. <xsd:element name="sayHelloResponse">25. <xsd:complexType>26. <xsd:sequence>27. <xsd:element maxOccurs="1"minOccurs="1"28. name="out"nillable="true"type="xsd:string"/>29. </xsd:sequence>30. </xsd:complexType>31. </xsd:element>32. </xsd:schema>33. </wsdl:types>34. <wsdl:message name="sayHelloResponse">35. <wsdl:part name="parameters"element="tns:sayHelloResponse"/>36. </wsdl:message>37. <wsdl:message name="sayHelloRequest">38. <wsdl:part name="parameters"element="tns:sayHello"/>39. </wsdl:message>40. <wsdl:portType name="HelloServicePortType">41. <wsdl:operation name="sayHello">42. <wsdl:input name="sayHelloRequest"43. message="tns:sayHelloRequest"/>44. <wsdl:output name="sayHelloResponse"45. message="tns:sayHelloResponse"/>46. </wsdl:operation>47. </wsdl:portType>48. <wsdl:binding name="HelloServiceHttpBinding"49. type="tns:HelloServicePortType">50. <wsdlsoap:binding style="document"51. transport="/soap/http"/>52. <wsdl:operation name="sayHello">53. <wsdlsoap:operation soapAction=""/>54. <wsdl:input name="sayHelloRequest">55. <wsdlsoap:body use="literal"/>56. </wsdl:input>57. <wsdl:output name="sayHelloResponse">58. <wsdlsoap:body use="literal"/>59. </wsdl:output>60. </wsdl:operation>61. </wsdl:binding>62. <wsdl:service name="HelloService">63. <wsdl:port name="HelloServiceHttpPort"64. binding="tns:HelloServiceHttpBinding">65. <wsdlsoap:address66. location="http://localhost:8080/xfire/services/HelloService"/>67. </wsdl:port>68. </wsdl:service>69.</wsdl:definitions>♦ types元素使用XML模式语言声明在WSDL文档中的其他位置使用的复杂数据类型与元素;♦ import元素类似于XML模式文档中的import元素,用于从其他WSDL文档中导入WSDL定义;♦ message元素使用在WSDL文档的type元素中定义或在import元素引用的外部WSDL文档中定义的XML模式的内置类型、复杂类型或元素描述了消息的有效负载;♦ portType元素和operation元素描述了Web服务的接口并定义了他的方法。