谈谈WebService开发-应用篇(三)-教你如何看WSDL文档

作为webservice客户端开发,在日常工作中可能经常会拿到一个对方提供的wsdl地址或文档,那么拿到这个地址后我们如何编写客户端调用代码呢,前面几篇只是以个人经验的方式写了下,那么真正要根据wsdl文档来编写客户端调用代码就必须学会看懂wsd文档。下面就结合之前的demo来深入剖析下wsdl文档,最后以图解的方式形象说明下。

   本文以之前的SayHello的Demo来深入分析下wsdl文档的几个部分,个人认为可以共分6部分,下面分别介绍:

<definitions/>

这部分在基础篇里已经介绍,主要说明引用了哪些schema以及schema的位置等,可以看下基础篇的介绍,SayHello的Demo这部分内容如下:

<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.service.server.ws.devins.com/"
	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http"
	xmlns:ns1="http://service.server.ws.devins.com/" name="SayHelloImplService"
	targetNamespace="http://impl.service.server.ws.devins.com/">

<types/>

         <!--
	 	 types
	 	 schema:约束xml格式
	 	 element:用来指定xml中的标签
	 	         <sayHello></sayhello>
	 	         <sayHelloResponse></sayHelloResponse>
	 	 complexType:说明是一个复合类型
	 	                  请求
	 	 		 <sayHello>
	 	 		 	<arg0>string</arg0>
	 	 		 </sayhello>
	 	 		   响应
	 	 		 <sayHelloResponse>
	 	 		 	<return>string</return>
	 	 		 </sayHelloResponse>

	    回看下demo的请求与响应的核心内容
	 	    <q0:sayHello>
              <arg0>devins</arg0>
            </q0:sayHello>

            <ns2:sayHelloResponse">
              <return>Hello: devins</return>
            </ns2:sayHelloResponse>

	  -->
	<wsdl:types>
		<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:tns="http://service.server.ws.devins.com/" elementFormDefault="unqualified"
			targetNamespace="http://service.server.ws.devins.com/" version="1.0">
			<xs:element name="sayHello" type="tns:sayHello" />
			<xs:element name="sayHelloResponse" type="tns:sayHelloResponse" />
			<xs:complexType name="sayHello">
				<xs:sequence>
					<xs:element minOccurs="0" name="arg0" type="xs:string" />
				</xs:sequence>
			</xs:complexType>
			<xs:complexType name="sayHelloResponse">
				<xs:sequence>
					<xs:element minOccurs="0" name="return" type="xs:string" />
				</xs:sequence>
			</xs:complexType>
		</xs:schema>
	</wsdl:types>

<message/>

        <!--
		message:用来定义soap消息结构
		part:部分/组成的意思
		实际上引用的就是上面schema中的约束格式
	 -->
	<wsdl:message name="sayHelloResponse">
		<wsdl:part element="ns1:sayHelloResponse" name="parameters" />
	</wsdl:message>
	<wsdl:message name="sayHello">
		<wsdl:part element="ns1:sayHello" name="parameters" />
	</wsdl:message>

<portType/>

        <!--
		portType:用来指定服务器端的SEI(接口)
		operation:表示操作/行为,即SEI中定义的方法
		input:方法sayHello的输入
		output:方法sayHello的输出
		输入输出引用的是上面message的定义
	 -->
	<wsdl:portType name="ISayHello">
		<wsdl:operation name="sayHello">
			<wsdl:input message="ns1:sayHello" name="sayHello" />
			<wsdl:output message="ns1:sayHelloResponse" name="sayHelloResponse" />
		</wsdl:operation>
	</wsdl:portType>

<binding/>

	<!--
		binding:用来指定SEI的实现类
		type属性:引用<portType>定义
		<soap:binding style="document">:表示传输的一个document (xml)
		<input><output>与上节说的相同
		<soap:body use="literal" />:表示body传输采用文本即xml格式的文本
	 -->
	<wsdl:binding name="SayHelloImplServiceSoapBinding" type="ns1:ISayHello">
		<soap:binding style="document"
			transport="http://schemas.xmlsoap.org/soap/http" />
		<wsdl:operation name="sayHello">
			<soap:operation soapAction="" style="document" />
			<wsdl:input name="sayHello">
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output name="sayHelloResponse">
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>

<service>

	<!--
		service:相同于webservice容器,也可理解为一个工厂
		name:用于指定客户端的容器类/工厂类,客户端代码从此类开始
		port:用来指定服务器端的一个入口(对应SEI的实现类)
		port binding:引用上面定义的
		port name:容器通过这个方法获得实现类
		address:客户端真正用于请求的地址

		回想我们的demo:
		SayHelloImplService factory = new SayHelloImplService();
		SayHelloImpl sayHelloImpl = factory.getSayHelloImplPort();
	 -->
	<wsdl:service name="SayHelloImplService">
		<wsdl:port binding="tns:SayHelloImplServiceSoapBinding"
			name="SayHelloImplPort">
			<soap:address location="http://132.122.239.74:8089/ws/sayhello" />
		</wsdl:port>
	</wsdl:service>

以上就webservice基础篇里的SayHello为例,详细对wsdl进行了剖析,最后再结合上面的分析以图示的方式形象展现下,希望对需要深入理解wsdl文档的朋友有一定帮助。

图解WSDL

根据WSDL文档中的几部分,以及各部分之间的引用关系,下面以图例的方式展现如下:

说明:上图中的箭头表示引用关系。

时间: 2024-08-26 09:31:14

谈谈WebService开发-应用篇(三)-教你如何看WSDL文档的相关文章

谈谈WebService开发-应用篇(一)---手机归属地查询

接续上一篇WebService基础,这里介绍一些常用应用的开发,主要是让大家练练手.后续还会介绍以后工作中常用的开发方式,采用CXF.AXIS2等第三方框架进行开发. 相信大家经常能看到一些网站有有手机归属地查询.天气预报等信息,那么这些信息是哪里来的呢?实际上是有一些单位提供了免费的webservice服务,那么哪里可以查到这些免费服务呢,大家可以到  Web服务(免费) 查询到不少免费的webservice服务,也可以访问这篇博文常用免费Webservice服务列表,里面收集了不少常用的免费

谈谈WebService开发-应用篇(二)-基于CXF-天气预报

上一篇我们通过源生JDK的方式尝试了调用免费的查手机归属地的webservice服务,这篇我们来尝试下采用Apache webservice开源框架CXF来开发一个客户端请求下天气预报信息. 开发步骤: 1.创建客户端工程:Weather-cxf-Client,下载cxf相关jar包即工具,如下图,有需要的朋友可以网上下载或小窗我: 2.利用cxf工具wsdl2java.bat生成客户端代码,工具在如下目录,考虑到使用方便,将以下bin目录设置到系统环境变量中: 3.查找免费的天气预报服务的ws

HTML5移动开发之路(42)——HTML4与HTML5文档结构比较

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(42)--HTML4与HTML5文档结构比较 一般来说,人们在书写包括HTML在内的文档时,习惯上按照类似于"章--节--小节"这样的层次结构来进行. 在HTML4中的描述方式: <html> <head> </head> <body> <h1>第一章 小强的HTML5移动开发之路</h1> <h2>1.1 HTM

三种方法解决android帮助文档打开慢

三种方法解决android帮助文档打开慢 经查是因为本地文档中的网页有如下两段js代码会联网加载信息,将其注释掉后就好了 <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto"> <script src="

【转帖】(三)unity4.6Ugui中文教程文档-------概要-UGUI Basic Layout

原创至上,移步请戳:(三)unity4.6Ugui中文教程文档-------概要-UGUI Basic Layout 2. BasicLayout 在这一节我们会看到UI元素相对于画布的位置是怎样的.如果你想要自己在阅读时测试,您可以创建Image,使用游戏菜单中的GameObject > UI > Image.. 2.1 The Rect Tool 每个 UI元素被表示为一个矩形布局.在场景视图中使用工具栏中的Rect Tool,可以操纵此矩形.Rect Tool用于unity2D的UI功能

IOS开发UI篇—导航控制器属性和基本使用 - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3768622.html IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) UINavigationController *nav=[[ UINavigationController alloc ] init ]; 2.设置导航控制器为window的根视图 self . window . rootViewController =nav

golang开发:类库篇(三)命令行工具cli的使用

为什么要使用命令行 觉得这个问题不应该列出来,又觉得如果初次进行WEB开发的话,可能会觉得所有的东西都可以使用API去做,会觉得命令行没有必要. 其实,一个生产的项目命令行是绕不过去的.比如运营需要导出报表.统计下付费用户.服务不稳定修改下订单状态等等,再者,命令行的工具基本都是内部使用,调试日志可以随意点,退一万步来说,即使有问题了,还可以再次修改.不像API是是随机性的,有些业务发生错误和异常是随机的.不可逆的. 怎么使用cli 这个主要看下使用案例就一目了然了. 首先下载类库包 go ge

小白学习server第五篇-----虚拟(目录/主机),防火墙,文档加密

虚拟目录? 通过别名方式挂载到网站根目录下的其他目录? 虚拟目录优点– 便于分别开发与维护– 移动位置不影响站点逻辑结构虚拟主机? 服务器上运行的多个网站称为虚拟主机? 实现虚拟主机的方式– 使用不同IP地址– 相同IP地址,不同端口号– 相同IP地址及端口号,不同主机名 Windows防火墙网络位置类型? 公用网络– 默认情况下,第一次连接到Internet时,操作系统会为任何新的网络连接设置为公用网络位置类型– 使用公用网络位置时,操作系统会阻止某些应用程序和服务运行,从而保护计算机? 专用

webService之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