`
jobar
  • 浏览: 340745 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
先上个图:

当然了学习之前是需要些基本知识的,比如xml,schema等
WSDL(web service description language)直译为网络服务描述语言,是使用xml编写的,用来描述网络上的服务,规定服务的位置以及服务具体提供的内容(操作等)
1、提供服务怎么来表示
     那么想想如果是我自己提供一种服务的话,是不是就需要暴露接口呢,如何暴露呢,以及通过什么样的方式来暴露呢?这就引出了wsdl的一个元素,如上图最右侧所示的service元素,xml 片段如下:
<wsdl:service name="calservice">
		<wsdl:port name="calserviceHttpPort" binding="tns:calserviceHttpBinding">
			<wsdlsoap:address location="http://localhost:8080/test/services/calservice"/>
		</wsdl:port>
	</wsdl:service>

服务的名字就叫做calservice,服务已经提供了,那么服务具体提供的操作如何呢?又如何告知其他人来访问我的服务呢,接下来又引出了另外一个非常重要的元素portType和binding
2、提供了服务之后,用户最终调用的是服务里面的操作(或者叫做方法),那么如何描述服务内部的操作呢?这就是portType元素干的事情。portType可以比作一个操作的集合体,一个类,而每个操作就是里面一个个具体的函数。里面的operation子元素指定了具体的操作,以及输入参数,输出参数。输入输出都是一种消息的传递,消息元素在后面说明。
<wsdl:portType name="calservicePortType">
		<wsdl:operation name="minus">
			<wsdl:input name="minusRequest" message="tns:minusRequest">
    </wsdl:input>
			<wsdl:output name="minusResponse" message="tns:minusResponse">
    </wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="multi">
			<wsdl:input name="multiRequest" message="tns:multiRequest">
    </wsdl:input>
			<wsdl:output name="multiResponse" message="tns:multiResponse">
    </wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="div">
			<wsdl:input name="divRequest" message="tns:divRequest">
    </wsdl:input>
			<wsdl:output name="divResponse" message="tns:divResponse">
    </wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="add">
			<wsdl:input name="addRequest" message="tns:addRequest">
    </wsdl:input>
			<wsdl:output name="addResponse" message="tns:addResponse">
    </wsdl:output>
		</wsdl:operation>
	</wsdl:portType>

我们定义了一个操作集合。里面提供的具体操作有加减乘除四个操作(add,minus,multi&div),还有输入参数跟输出参数
3、消息。上面看到的操作都有输入消息跟输出消息,我们可以把消息看作是对函数里面的参数进行的一种封装,输出消息也是对我们函数调用完之后返回值的一种封装。这样就可以理解消息的作用。输入参数可以看作是一种请求,而返回的输出消息可以看作一种响应。下面是代码片段。
消息内部的子元素part定义了我们输入输出参数的类型
<wsdl:message name="multiResponse">
		<wsdl:part name="parameters" element="tns:multiResponse">
    </wsdl:part>
	</wsdl:message>
	<wsdl:message name="divResponse">
		<wsdl:part name="parameters" element="tns:divResponse">
    </wsdl:part>
	</wsdl:message>
	<wsdl:message name="addRequest">
		<wsdl:part name="parameters" element="tns:add">
    </wsdl:part>
	</wsdl:message>
	<wsdl:message name="divRequest">
		<wsdl:part name="parameters" element="tns:div">
    </wsdl:part>
	</wsdl:message>
	<wsdl:message name="multiRequest">
		<wsdl:part name="parameters" element="tns:multi">
    </wsdl:part>
	</wsdl:message>
	<wsdl:message name="minusResponse">
		<wsdl:part name="parameters" element="tns:minusResponse">
    </wsdl:part>
	</wsdl:message>
	<wsdl:message name="addResponse">
		<wsdl:part name="parameters" element="tns:addResponse">
    </wsdl:part>
	</wsdl:message>
	<wsdl:message name="minusRequest">
		<wsdl:part name="parameters" element="tns:minus">
    </wsdl:part>
	</wsdl:message>

上面的消息里面有子元素part,里面定义的是具体的参数。
4、那么消息内部的元素类型又是如何定义呢?这就是types元素的工作,它定义了我们web service 内部使用的数据类型,这些都是schema语法来定义的。
<wsdl:types>
		<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://service.jobar.com">
			<xsd:element name="minus">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element maxOccurs="1" minOccurs="1" name="in0" type="xsd:int"/>
						<xsd:element maxOccurs="1" minOccurs="1" name="in1" type="xsd:int"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="minusResponse">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element maxOccurs="1" minOccurs="1" name="out" type="xsd:int"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="multi">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element maxOccurs="1" minOccurs="1" name="in0" type="xsd:int"/>
						<xsd:element maxOccurs="1" minOccurs="1" name="in1" type="xsd:int"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="multiResponse">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element maxOccurs="1" minOccurs="1" name="out" type="xsd:int"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="div">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element maxOccurs="1" minOccurs="1" name="in0" type="xsd:int"/>
						<xsd:element maxOccurs="1" minOccurs="1" name="in1" type="xsd:int"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="divResponse">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element maxOccurs="1" minOccurs="1" name="out" type="xsd:int"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="add">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element maxOccurs="1" minOccurs="1" name="in0" type="xsd:int"/>
						<xsd:element maxOccurs="1" minOccurs="1" name="in1" type="xsd:int"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="addResponse">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element maxOccurs="1" minOccurs="1" name="out" type="xsd:int"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:schema>
	</wsdl:types>

数据类型的定义完全是schema定义的。不具体阐述了。
5、ok,我们的服务定义好了,操作也定义好了,输入输出参数也都定义好了,参数用到的内部数据类型等都定义好了,那么如何来讲这些操作跟服务关联起来呢?这就是binding大神做的事情了。
binding 元素有两个属性:name 属性定义 binding 的名称;而 type属性指向用于binding 的portType例子中是我们上面定义好的calservicePortType。
soap:binding 元素有两个属性:style 属性可取值为"rpc" 或 "document";transport 属性定义了要使用的 SOAP 协议,我们这里用的是http;当然出了soap协议外还可使用http/GET跟http/POST,相应的操作也是http。
http/GET:
<http:binding verb="GET"/>

http/POST:
<http:binding verb="POST"/>

operation 元素定义了每个portType提供的操作。
<wsdl:binding name="calserviceHttpBinding" type="tns:calservicePortType">
		<wsdlsoap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
		<wsdl:operation name="minus">
			<wsdlsoap:operation/>
			<wsdl:input name="minusRequest">
				<wsdlsoap:body use="literal"/>
			</wsdl:input>
			<wsdl:output name="minusResponse">
				<wsdlsoap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="multi">
			<wsdlsoap:operation/>
			<wsdl:input name="multiRequest">
				<wsdlsoap:body use="literal"/>
			</wsdl:input>
			<wsdl:output name="multiResponse">
				<wsdlsoap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="div">
			<wsdlsoap:operation/>
			<wsdl:input name="divRequest">
				<wsdlsoap:body use="literal"/>
			</wsdl:input>
			<wsdl:output name="divResponse">
				<wsdlsoap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="add">
			<wsdlsoap:operation/>
			<wsdl:input name="addRequest">
				<wsdlsoap:body use="literal"/>
			</wsdl:input>
			<wsdl:output name="addResponse">
				<wsdlsoap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>

以上就是学习wsdl的总结。这几个元素之间存在依存关系,可以看到一个依赖另外一个的定义。
  • 大小: 30.2 KB
0
2
分享到:
评论

相关推荐

    WSDL学习文档(学习web服务必用)

    WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程...

    不需他人,轻松学习WSDL

    WSDL作为web services的服务描述语言,学好它对我们对web services的理解会更加清晰!!

    w3cschool菜鸟教程离线版chm手册 2016

    w3cschool菜鸟教程离线版目录: ...学习 HTML 学习 HTML5 学习 CSS 学习 CSS3 学习 Bootstrap ASP.NET 学习 ASP.NET 学习 C# 学习 Web Pages 学习 Razor 学习 MVC ...学习 WSDL 学习 SOAP 学习 RSS 学习 RDF

    WSDL 1.1 中文规范 doc 版.rar

    原文的地址在:http://www.w3.org/TR/wsdl,学习WSDL,需要有一定XML,XML Schema XSD,SOAP的相关知识,请在阅读时特别注意。 另外WSDL1.1是一个宽泛的规范,所有的语法都以非正式的形式出现,而且为了满足WEB ...

    详解WSDL文档格式

    详细介绍了WSDL格式 定义 语法 实例 对于学习WSDL的开发者有有一定的帮助。

    【学习 WSDL】.pdf

    【学习 WSDL】.pdf

    使用 WSDL 部署 Web 服务.pdf

    使用 WSDL 部署 Web 服务,IBM提供的极其详细的例子学习。

    wsdl.rar_WSDL

    利用爬虫在网上收集到的一些wsdl文档,学习WebService的同鞋可以看一看。

    WSDL文档学习

    WSDL中文文档学习,简单通俗易懂,webservice开发和调用必学

    用gsoap wsdl离线生成的onvif和方法

    用gsoap wsdl离线生成的onvif.h和方法,之所以用离线生成,是因为在线的onvif都是需要ssl,作为新手,编了很久查了很久,都不行,然后想下载现成的又没有够分。所以自己搞了一个离线,其实比起在线的也不是很复杂。...

    WebService经典24篇网文汇总,包含axis2_Xfire搭建_WSDL详解_自动生成客户端和WSDL等.rar

    WebService经典24篇网文汇总,包含axis2_Xfire搭建_WSDL详解_自动生成客户端和WSDL等,自己找了好久的内容; 都是自己学习过程中网络的知识,找了很久,里边有一些自己的标记,如果发现chm内容是空白,注意看一下,其实是...

    SOA-WSDL-BPEL

    SOA-WSDL-BPEL 学习这个东西的人就不用多说了.

    WebService描述语言WSDL详解

    了解webservice的描述语言,该文章分析的非常透彻,值得学习

    Web+Service学习SOAP协议简介WSDL简介

    SOAP协议简介 WSDL简介 对WSDL文件的每个节点的含意与功能都做了说明并带有一个客户与服务器的开发说明 该文档还讲到wsgen与wsimport命令说明与使用

    wsdl文件生成java webservice 工具(附带生成后调用方法)

    利用axis jar包 根据wsdl文件生成java webservice 工具 (附带生成后调用方法和详细说明) 及其适合工作着与初学者调试和学习,已经通过测试完全可用

    WSDL文件详解,webservice的经典学习

    wsdl绝对详解,下载不后悔!这是一篇很著名的文章,对每个字段都有详细的介绍

    CXF v3 从wsdl到java

    1.如果想学习java优先请访问http://download.csdn.net/source/3266183 2.包含一个eclipse工程以及一个ppt,ppt详细说明了实现的步骤。 3.设计中重点考察了schema validate的配置与实现,后续更高级的相关知识敬请...

    wsdl4j.zip

    wsdl4j源码,通过学习源码理解wsdl解析原理,鉴于安全考虑,wsdl4j源码涉A监管,希望国人可以通过借鉴其原理自己造一个解析wsdl分解的轮子,供国人使用

    JAVA如何调用wsdl过程详解

    主要介绍了JAVA如何调用wsdl过程详解,文中介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics