`
jobar
  • 浏览: 347263 次
  • 性别: 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服务必用)

    Web Services Description Language (WSDL) 是一种基于XML的应用,它被用来详细描述Web服务的接口和功能,使得客户端能够找到并使用这些服务。WSDL文档是Web服务的核心组成部分,它定义了服务提供者和消费者之间的...

    WSDL网络资源整理版

    **WSDL(Web Service Description Language)网络资源整理版** **一、WSDL简介** WSDL,全称为Web Service Description Language,是一种XML格式的规范,...学习WSDL及相关工具,将有助于提升Web服务开发的专业技能。

    不需他人,轻松学习WSDL

    Web服务描述语言(WSDL,Web Services Description Language)是一种XML格式,用于定义网络服务的接口。它是理解Web服务的关键组成部分,让服务消费者能够了解如何与服务进行交互。在这个例子中,我们将深入探讨WSDL...

    wsdl4j 解析wsdl 文件

    WSDL4J是一个Java库,专门用于解析和操作Web服务描述语言(WSDL)文件。WSDL是一种XML格式,用于定义网络服务的接口,包括其输入、输出、操作和服务...通过深入学习WSDL4J,开发者可以更有效地实现服务的交互和集成。

    wsdl.rar_WSDL

    在本压缩包“wsdl.rar”中,包含了若干个WSDL文档,这对于学习和理解WebService的开发者来说是一份宝贵的学习资料。 **1. WSDL基本结构** WSDL文档由一系列元素组成,包括服务、消息、操作、绑定、端口类型和接口。...

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

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

    wsdl调用测试工具

    这个文件名可能是某个WSDL调用测试工具的实例或示例,它可能包含了一个具体的WSDL调用案例,用户可以通过这个例子学习如何使用测试工具来调用和测试Web服务。 总的来说,WSDL调用测试工具是开发和维护Web服务不可或...

    WSDL.rar_C# 解析wsdl文件_WSDL_解析WSDL

    在IT行业中,Web服务是应用程序之间交互的一种标准方式,而WSDL(Web Services Description Language)则是用来定义这些服务接口的XML...学习和掌握WSDL解析对于任何涉及Web服务开发的程序员来说都是至关重要的技能。

    JavaScript 调用wsdl示例

    为了更深入地学习这个主题,你可以探索`SourceAndDemos`中的代码,了解实际的API调用方式,以及它们如何处理异步操作和错误。此外,熟悉WSDL和SOAP的相关概念也非常重要,因为这将有助于理解示例中的逻辑和交互过程...

    完整的WSDL解析,每一个标签都有得到

    **WSDL(Web Service Description Language)详解** WSDL,全称Web服务描述语言(Web Service Description Language),是一种XML格式的...通过深入学习和实践,开发者可以更有效地利用WSDL来创建和集成分布式系统。

    wsdl教程 w3c

    对于任何想要构建或使用Web服务的人来说,学习WSDL是至关重要的一步。 **WSDL的基本概念** 1. **服务端点(Service Endpoint)**:也称为绑定,是实际执行服务的网络地址。这可以是HTTP、FTP或其他通信协议上的URL...

    通过本地java代码访问wsdl接口

    标题中的“通过本地Java代码访问WSDL接口”指的是在Java编程环境中,利用WSDL(Web Service Description Language)文件来创建...通常,这些代码会包含服务接口、服务代理类、以及示例的调用代码,可供学习和参考。

    wsdl.rar_ wsdl_WSDL_wsdl soap

    **WSDL(Web Services Description Language)详解** WSDL,全称Web Services Description Language,是一种XML格式,...通过深入学习和实践,开发者可以更有效地构建和利用Web服务,提高系统的互操作性和可扩展性。

    WSDL1.1标准规范

    《WSDL 1.1标准规范:理解网络服务描述语言》 WSDL(Web Services Description Language)1.1版本作为W3C发布的官方标准...通过学习和掌握WSDL,开发者可以更有效地构建和维护网络服务,促进互联网技术的发展和应用。

    wsdl开发工具

    Web服务描述语言(WSDL,Web Services Description Language)是一种XML格式,用于定义网络服务的...对于初学者来说,理解WSDL的基本概念,学习如何通过这些工具生成、验证和测试WSDL文件,是迈进Web服务开发的第一步。

    Axis2 接口生成wsdl工具

    - `samples`:提供示例代码和配置,帮助用户快速了解和学习如何使用Axis2。 - `repository`:存储服务和模块的部署元数据,包括服务描述文件和服务实现类。 **5. Spring 和 JSON 支持** Axis2集成了Spring框架,...

    onvif wsdl转成java代码

    【标题】"onvif wsdl转成java代码"涉及的...总之,这个主题涵盖了网络通信协议、Web服务编程和Java应用开发等多个IT领域的知识,对于从事安防监控系统开发或者需要与ONVIF设备交互的开发者来说,是非常重要的学习内容。

    一个完整的WSDL文档及各标签详解

    在学习和应用WSDL时,还需要注意版本问题,目前主要使用的是WSDL 1.1,而WSDL 2.0虽然功能更强大,但普及度较低。此外,与WSDL配合使用的往往是SOAP协议,但随着RESTful API的流行,现在也出现了像WSDL for REST这样...

    wsdl文件详解 web wervices

    **WSDL文件详解:Web Services基础** Web服务(Web Services)是一种通过互联网交换数据和执行功能的方式...通过阅读和学习`wsdl-xsd.doc`和`wsdl文件详解.doc`这两个文档,你将能深入理解WSDL的工作原理和实际应用。

    wsdl4j-bin-1.6.3.zip

    Wsdl4j是一个Java库,专门用于处理WSDL(Web Services Description Language)文件。WSDL是一种XML格式,用于定义...通过学习和使用Wsdl4j,开发者可以更好地掌握Web服务的构建和部署,从而提升SOA应用的质量和效率。

Global site tag (gtag.js) - Google Analytics