先上个图:
当然了学习之前是需要些基本知识的,比如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
分享到:
相关推荐
Web Services Description Language (WSDL) 是一种基于XML的应用,它被用来详细描述Web服务的接口和功能,使得客户端能够找到并使用这些服务。WSDL文档是Web服务的核心组成部分,它定义了服务提供者和消费者之间的...
**WSDL(Web Service Description Language)网络资源整理版** **一、WSDL简介** WSDL,全称为Web Service Description Language,是一种XML格式的规范,...学习WSDL及相关工具,将有助于提升Web服务开发的专业技能。
Web服务描述语言(WSDL,Web Services Description Language)是一种XML格式,用于定义网络服务的接口。它是理解Web服务的关键组成部分,让服务消费者能够了解如何与服务进行交互。在这个例子中,我们将深入探讨WSDL...
WSDL4J是一个Java库,专门用于解析和操作Web服务描述语言(WSDL)文件。WSDL是一种XML格式,用于定义网络服务的接口,包括其输入、输出、操作和服务...通过深入学习WSDL4J,开发者可以更有效地实现服务的交互和集成。
在本压缩包“wsdl.rar”中,包含了若干个WSDL文档,这对于学习和理解WebService的开发者来说是一份宝贵的学习资料。 **1. WSDL基本结构** WSDL文档由一系列元素组成,包括服务、消息、操作、绑定、端口类型和接口。...
w3cschool菜鸟教程离线版目录: ...学习 HTML 学习 HTML5 学习 CSS 学习 CSS3 学习 Bootstrap ASP.NET 学习 ASP.NET 学习 C# 学习 Web Pages 学习 Razor 学习 MVC ...学习 WSDL 学习 SOAP 学习 RSS 学习 RDF
这个文件名可能是某个WSDL调用测试工具的实例或示例,它可能包含了一个具体的WSDL调用案例,用户可以通过这个例子学习如何使用测试工具来调用和测试Web服务。 总的来说,WSDL调用测试工具是开发和维护Web服务不可或...
在IT行业中,Web服务是应用程序之间交互的一种标准方式,而WSDL(Web Services Description Language)则是用来定义这些服务接口的XML...学习和掌握WSDL解析对于任何涉及Web服务开发的程序员来说都是至关重要的技能。
为了更深入地学习这个主题,你可以探索`SourceAndDemos`中的代码,了解实际的API调用方式,以及它们如何处理异步操作和错误。此外,熟悉WSDL和SOAP的相关概念也非常重要,因为这将有助于理解示例中的逻辑和交互过程...
**WSDL(Web Service Description Language)详解** WSDL,全称Web服务描述语言(Web Service Description Language),是一种XML格式的...通过深入学习和实践,开发者可以更有效地利用WSDL来创建和集成分布式系统。
对于任何想要构建或使用Web服务的人来说,学习WSDL是至关重要的一步。 **WSDL的基本概念** 1. **服务端点(Service Endpoint)**:也称为绑定,是实际执行服务的网络地址。这可以是HTTP、FTP或其他通信协议上的URL...
标题中的“通过本地Java代码访问WSDL接口”指的是在Java编程环境中,利用WSDL(Web Service Description Language)文件来创建...通常,这些代码会包含服务接口、服务代理类、以及示例的调用代码,可供学习和参考。
**WSDL(Web Services Description Language)详解** WSDL,全称Web Services Description Language,是一种XML格式,...通过深入学习和实践,开发者可以更有效地构建和利用Web服务,提高系统的互操作性和可扩展性。
《WSDL 1.1标准规范:理解网络服务描述语言》 WSDL(Web Services Description Language)1.1版本作为W3C发布的官方标准...通过学习和掌握WSDL,开发者可以更有效地构建和维护网络服务,促进互联网技术的发展和应用。
Web服务描述语言(WSDL,Web Services Description Language)是一种XML格式,用于定义网络服务的...对于初学者来说,理解WSDL的基本概念,学习如何通过这些工具生成、验证和测试WSDL文件,是迈进Web服务开发的第一步。
- `samples`:提供示例代码和配置,帮助用户快速了解和学习如何使用Axis2。 - `repository`:存储服务和模块的部署元数据,包括服务描述文件和服务实现类。 **5. Spring 和 JSON 支持** Axis2集成了Spring框架,...
【标题】"onvif wsdl转成java代码"涉及的...总之,这个主题涵盖了网络通信协议、Web服务编程和Java应用开发等多个IT领域的知识,对于从事安防监控系统开发或者需要与ONVIF设备交互的开发者来说,是非常重要的学习内容。
在学习和应用WSDL时,还需要注意版本问题,目前主要使用的是WSDL 1.1,而WSDL 2.0虽然功能更强大,但普及度较低。此外,与WSDL配合使用的往往是SOAP协议,但随着RESTful API的流行,现在也出现了像WSDL for REST这样...
**WSDL文件详解:Web Services基础** Web服务(Web Services)是一种通过互联网交换数据和执行功能的方式...通过阅读和学习`wsdl-xsd.doc`和`wsdl文件详解.doc`这两个文档,你将能深入理解WSDL的工作原理和实际应用。
Wsdl4j是一个Java库,专门用于处理WSDL(Web Services Description Language)文件。WSDL是一种XML格式,用于定义...通过学习和使用Wsdl4j,开发者可以更好地掌握Web服务的构建和部署,从而提升SOA应用的质量和效率。