WSDL实例解析

article/2025/9/23 7:22:04

WSDL的主要文档元素

WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随 机器或语言而变的元素。这就定义了一系列服务,截然不同的应用都可以实现。具体部分,如数据的序列化则归入底部分,因为它包含具体的定义。在上述的文档元 素中,<types>、<message>、<portType>属于抽象定义 层,<binding>、<service>属于具体定义层。所有的抽象可以是单独存在于别的文件中,也可以从主文档中导入。 

WSDL文档的结构实例解析 
下面我们将通过一个实际的WSDL文档例子来详细说明各标签的作用及关系。

Wsdl代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <definitions  
  3. xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  
  4. xmlns:tns="http://www.jsoso.com/wstest"  
  5. xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
  6. xmlns="http://schemas.xmlsoap.org/wsdl/"  
  7. targetNamespace="http://www.jsoso.com/wstest"  
  8. name="Example">  
  9. <types>  
  10. <xsd:schema>  
  11. <xsd:import  
  12. namespace="http://www.jsoso.com/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:binding  
  45. transport="http://schemas.xmlsoap.org/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"  
  51. namespace="http://www.jsoso.com/wstest"></soap:body>  
  52. </input>  
  53. <output>  
  54. <soap:body use="literal"  
  55. namespace="http://www.jsoso.com/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"  
  62. namespace="http://www.jsoso.com/wstest"></soap:body>  
  63. </input>  
  64. <output>  
  65. <soap:body use="literal"  
  66. namespace="http://www.jsoso.com/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. <definitions  
  2. xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  
  3. xmlns:tns="http://www.jsoso.com/wstest"  
  4. xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
  5. xmlns="http://schemas.xmlsoap.org/wsdl/"  
  6. targetNamespace="http://www.jsoso.com/wstest"  
  7. name="Example">  
  8. ……  
  9. ……  
  10. </definitions>  

 <definitions>定义了文档中用到的各个xml元素的namespace缩写,也界定了本文档自己的 targetNamespace="http://www.jsoso.com/wstest",这意味着其它的XML要引用当前XML中的元素时,要声 明这个namespace。注意xmlns:tns="http://www.jsoso.com/wstest"这个声明,它标示了使用tns这个前缀 指向自身的命名空间。

 

WSDL文档数据类型定义元素:<types>

Xml代码   收藏代码
  1. <types>  
  2. <xsd:schema>  
  3. <xsd:import  
  4. namespace="http://www.jsoso.com/wstest"  
  5. schemaLocation="http://localhost:8080/hello?xsd=1"></xsd:import>  
  6. </xsd:schema>  
  7. </types>  

 <types>标签定义了当前的WSDL文档用到的数据类型。要说明的是,为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。这些数据类型用来定义web service方法的参数和返回指。对于通用的原生数据类型如:integer , boolean , char , float等,在W3C的标准文档http://www.w3.org/2001/XMLSchema中已经做了定义。这里我们要引入的schema定义 schemaLocation="http://localhost:8080/hello?xsd=1"是我们自定义的Java对象类型。

 

WSDL文档消息体定义元素:< message >

Xml代码   收藏代码
  1. <message name="toSayHello">  
  2. <part name="userName" type="xsd:string"></part>  
  3. </message>  
  4. <message name="toSayHelloResponse">  
  5. <part name="returnWord" type="xsd:string"></part>  
  6. </message>  
  7. <message name="sayHello">  
  8. <part name="person" type="tns:person"></part>  
  9. <part name="arg1" type="xsd:string"></part>  
  10. </message>  
  11. <message name="sayHelloResponse">  
  12. <part name="personList" type="tns:personArray"></part>  
  13. </message>  
  14. <message name="HelloException">  
  15. <part name="fault" element="tns:HelloException"></part>  
  16. </message>  

 <message>元素定义了web service函数的参数。<message>元素中的每个<part>子元素都和某个参数相符。输入参数在<message>元素中定义,与输出参数相 隔离,输出参数有自己的<message>元素。兼作输入、输出的参数在输入输出的<message>元素中有它们相应的<part>元素。输出 <message>元素以"Response"结尾,对Java而言方法得返回值就对应一个输出的<message>。每个<part>元素都有名字和类 型属性,就像函数的参数有参数名和参数类型。 

在上面的文档中有两个输入参数、两个输出参数和一个错误参数(对应Java中的Exception)。 

 输入参数<message>的name属性分别命名为toSayHello,sayHello。 
toSayHello对应输入参数userName,参数类型为xsd:string,在Java语言中就是String; 
sayHello对应两个输入参数person和arg1,类型为tns:person和xsd:string。这里tns:person类型就是引用了< types >标签中的类型定义。 

 输出参数<message>的name属性分别命名为toSayHelloResponse和sayHelloResponse。 
这个名称和输入参数的<message>标签name属性对应,在其后面加上Response尾缀。 
toSayHelloResponse对应的返回值是returnWord,参数类型为xsd:string; 
sayHelloResponse对应的返回值是personList,参数类型为tns:personArray(自定义类型); 

 错误参数<message>的name属性为HelloException。 
它的<part>子标签element而不是type来定义类型。 

以上的message标签的name属性通常使用web service函数方法名作为参照,错误参数标签则使用异常类名为参照。标签中的参数名称,即part子元素的name属性是可自定义的(下一章节详细说 明)。message标签的参数类型将引用types标签的定义。

 

WSDL文档函数体定义元素:< portType >

Xml代码   收藏代码
  1. <portType name="Example">  
  2. <operation name="toSayHello" parameterOrder="userName">  
  3. <input message="tns:toSayHello"></input>  
  4. <output message="tns:toSayHelloResponse"></output>  
  5. </operation>  
  6. <operation name="sayHello" parameterOrder="person arg1">  
  7. <input message="tns:sayHello"></input>  
  8. <output message="tns:sayHelloResponse"></output>  
  9. <fault message="tns:HelloException" name="HelloException"></fault>  
  10. </operation>  
  11. </portType>  

 
在<operation>元素中,name属性表示服务方法名,parameterOrder属性表示方法的参数顺序,使用空格符分割多个参 数,如:“parameterOrder="person arg1”。<operation>元素的子标签<input>表示输入参数说明,它引用<message>标签中的输入参 数。<output>表示输出参数说明,它引用<message>标签中的输出参数。<fault>标签在Java方法中的特别 用来表示异常(其它语言有对应的错误处理机制),它引用<message>标签中的错误参数。 

WSDL绑定实现定义元素:< binding >

Xml代码   收藏代码
  1. <binding name="ExamplePortBinding" type="tns:Example">  
  2. <soap:binding  
  3. transport="http://schemas.xmlsoap.org/soap/http"  
  4. style="rpc"></soap:binding>  
  5. <operation name="toSayHello">  
  6. <soap:operation soapAction="sayHello"></soap:operation>  
  7. <input>  
  8. <soap:body use="literal"  
  9. namespace="http://www.jsoso.com/wstest"></soap:body>  
  10. </input>  
  11. <output>  
  12. <soap:body use="literal"  
  13. namespace="http://www.jsoso.com/wstest"></soap:body>  
  14. </output>  
  15. </operation>  
  16. <operation name="sayHello">  
  17. <soap:operation soapAction="sayHello"></soap:operation>  
  18. <input>  
  19. <soap:body use="literal"  
  20. namespace="http://www.jsoso.com/wstest"></soap:body>  
  21. </input>  
  22. <output>  
  23. <soap:body use="literal"  
  24. namespace="http://www.jsoso.com/wstest"></soap:body>  
  25. </output>  
  26. <fault name="HelloException">  
  27. <soap:fault name="HelloException" use="literal"></soap:fault>  
  28. </fault>  
  29. </operation>  
  30. </binding>  

 <binding>标签是完整描述协议、序列化和编码的地方,<types>,<message>和<portType>标签处理抽象的数据内容,而<binding>标签是处理数据传输的物理实现。 
<binding>标签把前三部分的抽象定义具体化。 

首先<binding>标签使用<soap:binding>的transport和style属性定义了Web Service的通讯协议HTTP和SOAP的请求风格RPC。其次<operation>子标签将portType中定义的 operation同SOAP的请求绑定,定义了操作名称soapAction,输出输入参数和异常的编码方式及命名空间。 

WSDL服务地址绑定元素:< service >

Xml代码   收藏代码
  1. <service name="Example">  
  2. <port name="ExamplePort" binding="tns:ExamplePortBinding">  
  3. <soap:address location="http://localhost:8080/hello"></soap:address>  
  4. </port>  
  5. </service>  

 service是一套<port>元素。在一一对应形式下,每个<port>元素都和一个location关联。如果同一个<binding>有多个<port>元素与之关联,可以使用额外的URL地址作为替换。 

一个WSDL文档中可以有多个<service>元素,而且多个<service>元素十分有用,其中之一就是可以根据目标URL来组织端口。在一个 WSDL文档中,<service>的name属性用来区分不同的service。在同一个service中,不同端口,使用端口的"name"属性区 分。 

简单的描述了WSDL对SOAP协议的支持,以及在Web Service中的作用。


http://chatgpt.dhexx.cn/article/N44OjJsB.shtml

相关文章

WSDL、详解

WebService中的WSDL详解 有人在WebService开发的时候&#xff0c;特别是和第三方有接口的时候&#xff0c;走的是SOAP协议&#xff0c;然后用户&#xff08;或后台&#xff09;给你一个WSDL文件&#xff08;或网址&#xff09;&#xff0c;说按照上面的进行适配&#xff0c; 这…

wsdl和wadl区别

1、Java开发WebService最重要的两个规范&#xff1a; JSR-224 (JAX-WS&#xff1a;Java API for XML-Based Web Services ) &#xff0c;主要使用soap协议&#xff0c;使用wsdl来描述&#xff1b;JSR-311 (JAX-RS&#xff1a;The Java API for RESTful Web Services)&#xff…

WebService中的WSDL详细解析

WebService中的WSDL详解 有人在WebService开发的时候&#xff0c;特别是和第三方有接口的时候&#xff0c;走的是SOAP协议&#xff0c;然后用户&#xff08;或后台&#xff09;给你一个WSDL文件&#xff08;或网址&#xff09;&#xff0c;说按照上面的进行适配&#xff0c; 这…

WSDL详解

原文链接&#xff1a;WebService中的WSDL详解 有人在WebService开发的时候&#xff0c;特别是和第三方有接口的时候&#xff0c;走的是SOAP协议&#xff0c;然后用户&#xff08;或后台&#xff09;给你一个WSDL文件&#xff08;或网址&#xff09;&#xff0c;说按照上面的进…

WebService的WSDL详解以及远程访问WebService

一、WSDL详解 1.wsdl是一个用于精确描述Web服务的文档&#xff0c;是一个遵循wsdl-xml模式的xml文档。 2.一个wsdl文档通常包括8个重要元素&#xff0c;即definitions、types、import、message、portType、operation、binding、service元素。 3.这些元素嵌套在definitions元…

WebService中的WSDL详解

WebService中的WSDL详解 有人在WebService开发的时候&#xff0c;特别是和第三方有接口的时候&#xff0c;走的是SOAP协议&#xff0c;然后用户&#xff08;或后台&#xff09;给你一个WSDL文件&#xff08;或网址&#xff09;&#xff0c;说按照上面的进行适配&#xff0c; 这…

云计算与网格计算关系有别

导读&#xff1a;最近不断有人或询问云计算与网格计算的区别&#xff0c;或认为云计算是网格计算的延伸&#xff0c;甚至有学者写出比较的论文。事实上&#xff0c;云计算和网格计算本没有任何关系&#xff0c;但本文将澄清云计算和网格计算的区别&#xff0c;至于云计算和分布…

SOA、网格计算、云计算与P2P技术

1.面向服务的体系结构SOA 1&#xff09;定义&#xff1a;Service-Oriented Architecture&#xff0c;一种应用的体系结构&#xff0c;其中所有的功能都定义为独立的具有可调用的接口的服务。这些服务可以在一个流程中被调用从而完成相应的商业处理过程。服务可以位于同一个应用…

简单理解串行计算、并行计算、分布式计算、网格计算与云计算

并行计算 并行计算可以划分成时间并行和空间并行。时间并行即流水线技术&#xff0c;空间并行使用多个处理器执行并发计算&#xff0c;当前研究的主要是空间的并行问题。 并行计算是相对于串行计算来说的。要理解并行计算&#xff0c;首先需要了解串行计算。串行计算是不将任…

网格计算和云计算之间的比较

转自&#xff1a;http://www.chinacloud.cn/show.aspx?id15020&cid14 随着网络技术的不断的发展和深入&#xff0c;网络信息越来越多&#xff0c;数据海量的进行挖挖取&#xff0c;而随之而来的就是新概念和新技术的诞生&#xff0c;目前有两种网络的计算方法最受人们关注…

云计算机基于什么网络吗,什么是云计算,什么是网格计算,他们之间有什么区别...

原标题&#xff1a;什么是云计算&#xff0c;什么是网格计算&#xff0c;他们之间有什么区别 随着网络技术的广泛应用和深化&#xff0c;网络信息与服务趋于海量&#xff0c;海量数据挖掘处理、分布异构等问题逐渐显现&#xff0c;随之新概念新技术也层出不穷&#xff0c;以云计…

高性能计算中的并行计算、分布式计算、网格计算和云计算之间的区别与联系

并行计算、分布式计算、网格计算与云计算都属于高性能计算&#xff08;High Performance Computing&#xff0c;HPC&#xff09;的范畴&#xff0c;主要目的在于对大数据的分析与处理&#xff0c;但它们却存在很多差异。电子海图云服务是基于高性能计算的理论技术、通过对传统服…

云计算、分布式计算和网格计算,主要有什么区别,基本概念是什么?

分布式计算 分布式计算是利用互联网上的计算机的中央处理器的闲置处理能力来解决大型计算问题的一种计算科学。研究如何把巨大的问题分成许多小的部分&#xff0c;然后把这些小任务分配给许多计算机进行处理&#xff0c;最后把这些计算结果综合起来得到最终的结果。在两个或多…

并行计算、分布式计算、集群计算和网格计算的介绍,以及主要有哪些区别?

并行计算&#xff08;Parallel Computing&#xff09;      并行计算或称平行计算是相对于串行计算来说的。并行计算&#xff08;Parallel Computing&#xff09;是指同时使用多种计算资源解决计算问题的过程。为执行并行计算&#xff0c;计算资源应包括一台配有多处理机&a…

什么是云计算,什么是网格计算,两者之间有什么区别?

在此表述云计算和网格计算的区别&#xff0c;至于云计算和分布式计算、效用计算等等概念&#xff0c;读者可以以此类推。 狭义云计算是指IT基础设施的交付和使用模式&#xff0c;指通过网络以按需、易扩展的方式获得所需的资源&#xff08;硬件、平台、软件&#xff09;。提供…

云计算、网格计算、效用计算、自主计算的区别辨析

云计算 什么是云&#xff1f; 云计算中的资源池称为“云”。”云”是一些可以自我维护和管理的虚拟资源&#xff0c;通常是一些大型服务器集群&#xff0c;包括计算服务器、存储服务器和宽带资源等。 为什么叫云&#xff1f; 因为云计算中的云在某些方面具有现实中云的特征&…

网格计算介绍

网格计算&#xff08;Grid computing&#xff09;是分布式计算的一种&#xff0c;是一门计算机科学。它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分&#xff0c;然后把这些部分分配给许多计算机进行处理&#xff0c;最后把这些计算结果综合起来得到最…

网格计算简介

内容提要 主要介绍如下内容&#xff1a;1&#xff09;什么是网格计算2&#xff09; 网格计算能做什么3&#xff09; 主要组成部分是什么4&#xff09; 网格计算的标准5&#xff09; 现在可以建设网格了吗6&#xff09; IBM为网格计算提供什么工具7&#xff09; 如何为我的应用提…

XSS基础

文章目录 一、XSS是什么&#xff1f;二、XSS漏洞原理1.XSS和SQL注入的区别2.反射型XSS3.存储型XSS4.DOM型XSS5.防范xss 一、XSS是什么&#xff1f; XSS攻击通常指的是通过利用网页开发时留下的漏洞&#xff0c;通过巧妙的方法注入恶意指令代码到网页&#xff0c;使用户加载并执…

XSS攻击原理与解决方法

一、概述 XSS攻击是Web攻击中最常见的攻击方法之一&#xff0c;它是通过对网页注入可执行代码且成功地被浏览器执行&#xff0c;达到攻击的目的&#xff0c;形成了一次有效XSS攻击。一旦攻击成功&#xff0c;它可以获取到用户的联系人列表&#xff0c;然后向联系人发送虚假诈骗…