Web Service描述语言 WSDL 详解
- 格式:pdf
- 大小:479.21 KB
- 文档页数:30
wsdl文件结构分析WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。
WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。
相关的具体部署的服务访问点通过组合就成为抽象的Web服务。
本文将详细讲解WSDL文档的结构,并分析每个元素的作用。
一:WSDL定义WSDL是一个用于精确描述Web服务的文档,WSDL文档是一个遵循WSDL XML模式的XML文档。
WSDL 文档将Web服务定义为服务访问点或端口的集合。
在 WSDL 中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用:消息,指对交换数据的抽象描述;而端口类型,指操作的抽象集合。
用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。
将Web访问地址与可再次使用的绑定相关联,可以定义一个端口,而端口的集合则定义为服务。
一个WSDL文档通常包含7个重要的元素,即types、import、message、portType、operation、binding、 service元素。
这些元素嵌套在definitions 元素中,definitions是WSDL文档的根元素。
文章的下一部分将会详细介绍WSDL 的基本结构。
二:WSDL的基本结构--概述如第一部分最后描述的那样,一个基本的WSDL文档包含7个重要的元素。
下面将分别介绍这几个元素以及他们的作用。
WSDL 文档在Web服务的定义中使用下列元素:· Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。
WebService理论详解、JWS(JavaWebService)快速⼊门⽬录WebService (web服务)概述1、WebService(Web服务)是⼀种跨语⾔、跨平台的远程调⽤技术。
A、跨语⾔:服务器与客户端可以使⽤不同的语⾔开发,客户端都能调⽤服务器开放的接⼝,服务器只需要写⼀遍,任意语⾔的客户端都能进⾏调⽤。
B、跨平台:服务端程序和客户端程序可以运⾏在不同的操作系统上。
C、远程调⽤:指计算机 A(客户端) 上的程序可以调⽤计算机 B(服务器) 上的对象的⽅法。
如⽕车站进出站需要刷⾝份证,参加⼤型展会、演唱会时也可以刷⾝份证,显然⽕车站以及展览会、演唱会这些刷⾝份证的系统⾃⼰是不可能有全国⼈民的⾝份证数据的,它们都在公安局的数据库⾥,所以就可以理解成是公安⾝份证系统使⽤ webService 向外提供了接⼝,各地刷⾝份证的系统作为客户端调⽤⽽已。
2、WebService 是可互操作的分布式应⽤程序的⼀个平台、⼀个标准,它定义了应⽤程序如何在 Web 上实现互操作性,可以⽤任何语⾔在任何平台上写Web Service 服务端,然后可以通过 Web service 标准对这些服务进⾏操作。
3、如果系统需要为任意的第三⽅客户提供服务,那么服务器系统就可以使⽤ webService 技术,这样⽅便数据交互。
需要注意的是如果服务端接⼝⽅为webservice,则客户端也必须使⽤ webservice 。
web Service 应⽤场景?1. 同⼀家公司的新旧应⽤之间,⼦系统之间,如校内的招⽣系统、就业系统、缴费系统、考试系统等2. 不同公司的业务应⽤之间,如天猫⽹与中通物流系统交互3. ⼀些提供数据的内容聚合服务应⽤,如天⽓预报、股票⾏情、机票、邮政编码等如何发布⼀个 webService?1、定义 SEI(Service Endpoint Interface)服务终端接⼝,即 webService 提供的服务接⼝2、定义 SIB(Service Implemention Bean)服务实现类,即 webService 提供的服务接⼝的实现类3、发布 webService 服务 Endpoint publish(String address, Object implementor)如何请求⼀个 webService?1、根据服务的提供的 wsdl ⽂档⽣成客户端代码,可以使⽤ Java Jdk⾃带的 wsimport.exe⼯具,或者使⽤第三⽅如 Apache 的 CXF wsdl2java ⼯具既能⽣成服务端代码,也能⽣成客户端代码。
WEBSERVICE简介Web ServiceWeb Service是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的we b 应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。
Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,So ap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。
一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。
技术和规则在构建和使用Web Service时,主要用到以下几个关键的技术和规则:1.XML:描述数据的标准方法.2.SOAP:表示信息交换的协议.3.WSDL:Web服务描述语言.4.UDDI(Universal Description, Discovery and Integration):通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议。
实际上,WebService的主要目标是跨平台的可互操作性。
为了达到这一目标,WebService完全基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。
由此可以看出,在以下三种情况下,使用WebService会带来极大的好处。
XML可扩展标记语言(Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
XML是标准通用标记语言(SG ML) 的子集,非常适合Web 传输。
XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
浅淡Webservice、WSDL三种服务访问的⽅式(附案例)WebserviceWebservice是使应⽤程序以与平台和编程语⾔⽆关的⽅式进⾏相互通信技术。
eg:站点提供访问的数据接⼝:新浪微博、淘宝。
官⽅解释:它是⼀种构建应⽤程序的普遍模型,可以在任何⽀持⽹络通信的操作系统中实施运⾏;它是⼀种新的web应⽤程序分⽀,是⾃包含、⾃描述、模块化的应⽤,可以发布、定位、通过web调⽤。
WebService是⼀个应⽤组件,它逻辑性的为其他应⽤程序提供数据与服务.各应⽤程序通过⽹络协议和规定的⼀些标准数据格式(Http,XML,Soap)来访问WebService,通过WebService内部执⾏得到所需结果.Web Service可以执⾏从简单的请求到复杂商务处理的任何功能。
⼀旦部署以后,其他WebService应⽤程序可以发现并调⽤它部署的服务。
SOAP(Simple Object Access Protocol):简单对象访问协议是在分散或分布式的环境中交换信息并执⾏远程过程调⽤的轻量级协议,是⼀个基于XML的协议。
使⽤SOAP,不⽤考虑任何特定的传输协议(最常⽤的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何⼀种语⾔相互通信。
WSDL:Web Services Description Language的缩写,是⼀个⽤来描述Web服务和说明如何与Web服务通信的XML语⾔。
为⽤户提供详细的接⼝说明书。
Axis:Axis本质上就是⼀个SOAP引擎(Apache Axis is an implementation of the SAOP),提供创建服务名、客户端和⽹关SOAP操作的基本框架。
但是Axis并不完全是⼀个SOAP引擎,它还包括:是⼀个独⽴的SOAP服务器。
是⼀个嵌⼊Servlet引擎(eg:Tomcat)的服务器。
⽀持WSDL。
提供转化WSDL为Java类的⼯具。
WebService教程详解(⼀)Web Services 可以将应⽤程序转换为⽹络应⽤程序。
通过使⽤ Web Services,您的应⽤程序可以向全世界发布信息,或提供某项功能。
Web Services 可以被其他应⽤程序使⽤。
通过 Web Services,您的会计部门的 Win 2k 服务器可以与 IT 供应商的 UNIX 服务器相连接。
基本的 Web Services 平台是 XML+HTTP。
Web services 使⽤ XML 来编解码数据,并使⽤ SOAP 来传输数据。
什么是webServiceWebService,顾名思义就是基于Web的服务。
它使⽤Web(HTTP)⽅式,接收和响应外部系统的某种请求。
从⽽实现远程调⽤.1:从WebService的⼯作模式上理解的话,它跟普通的Web程序(⽐如ASP、JSP等)并没有本质的区别,都是基于HTTP传输协议的程序。
2:WebService所使⽤的数据均是基于XML格式的。
⽬前标准的WebService在数据格式上主要采⽤SOAP协议。
SOAP协议实际上就是⼀种基于XML编码规范的⽂本协议。
webService的技术⽀持Web Service平台需要⼀套协议来实现分布式应⽤程序的创建。
任何平台都有它的数据表⽰⽅法和类型系统。
要实现互操作性,Web Service平台必须提供⼀套标准的类型系统,⽤于沟通不同平台、编程语⾔和组件模型中的不同类型系统。
⽬前这些协议有:XML和XSD 可扩展的标记语⾔XML 是Web Service平台中表⽰数据的基本格式。
除了易于建⽴和易于分析外,XML主要的优点在于它既与平台⽆关,⼜与⼚商⽆关。
XML是由万维⽹协会(W3C)创建,W3C制定的XML SchemaXSD 定义了⼀套标准的数据类型,并给出了⼀种语⾔来扩展这套数据类型。
Web Service平台是⽤XSD来作为数据类型系统的。
当你⽤某种语⾔如VB. NET或C# 来构造⼀个Web Service时,为了符合Web Service标准,所有你使⽤的数据类型都必须被转换为XSD类型。
从标准上来说,整个技术架构是WebServices(带s的),有时会看到很多人写成WebService(不带s的),其实这是不标准的WebService指的是单独一个服务,而WebServices指的是它的技术架构目前WebServices技术使用的稍多些,因为它走的是HTTP协议,它可以穿越防火墙,它天生就能穿越80端口但是WebServices的缺点就是:慢!!因为WebServices是基于HTTP协议传送大文本,实际传送的是XML文件而IIOP(属于CORBA技术架构)协议传送的就是二进制,所以它的效率要比WebServices快很多所以在一些行业里,也大量的使用了CORBA技术,比如说电信网而CORBA的缺点就是:编程模型复杂,它是属于重量级的SOAP——简单对象访问协议假设我们在本地通过Java写一个main()方法与远程的一个可以是用任何语言写的取得天气预报的服务打交道如果打交道的过程中采用的是WebServices技术的话,那么它传送给远程的就是XML文件,使用的是SOAP协议SOAP即简单对象访问协议,其实质就是HTTP+XML,也就是说它是通过HTTP协议来传送XML文件也就是说SOAP是基于XML的简易协议,可以使应用程序在HTTP之上进行信息交换或者更简单地说SOAP是用于访问网络服务的协议,而一条SOAP消息就是一个普通的XML文档使用SOAP协议通信的过程中,远程对象会将所要返回的信息形成一个XML文件传给Stub然后客户端就会把XML文件转换成Java对象,而当客户端在调用远程服务时客户端就会把Java对象转换成XML文件作为参数传给Skeleton,而Skeleton 就负责把XML文件转换成远程服务的相应语言的对象比如说服务端是采用Java开发的,那么Skeleton就会将接收到的数据解析成Java对象,再传送给服务端同理若服务端是采用C#开发的,那么Skeleton就会将接收到的数据解析成C#对象,再传送给服务端所以,WebServices能够实现异构语言的通信,可以用来整合异构系统同理,如果不是异构系统的话,也就没有必要使用WebServices技术比如说客户端和远程对象都是采用Java开发的,那么就没有必要使用WebServices了因为二者都是采用Java开发的,它们之间可以直接以二进制来传输数据,访问效率会快的很多而WebServices其实就是基于XML的数据交换,即WebServices所传送的是大文本,效率自然就慢了除非我们的系统是采用多语言开发的,那么就可以考虑使用WebServices技术或者说我们的系统想做的通用一些,则可以采用并开放WebServices的一些方法其实SOAP就是用来最终完成Web服务的调用的,而WSDL则用于描述如何使用SOAP来调用Web服务WSDL——WebServices描述语言仍以上面为例,即客户端采用Java开发,服务端是采用C#开发的天气预报的服务作为客户端,它知道在服务端提供了一个能够获取天气预报的服务,并且客户端也可以调用该服务但作为服务端,应该对这些服务进行描述,以告诉客户端都有哪些服务可供调用而这个服务是不能用C#语言来描述的,因为采用Java开发的客户端是无法识别的所以服务端就需要使用一套语言来描述它所提供的服务,这套语言就是WSDL 其实WSDL就是一个XML文件,也就是说WebServices定义了一套标准,里面都是XML格式使用这套标准来描述服务端对外提供的服务,比如C#的方法名、参数名、返回值等信息假设服务端的天气预报功能还没有使用C#来实现,并且客户端也没有使用Java 来实现这时突然要求定义一套标准来描述一下即将准备实现的服务端的天气预报的功能并且客户端可以任意调用这个天气预报功能,此时就可以写一套WSDL来描述方法名、参数、返回值等信息当服务端的C#得到该WSDL时,就可以通过WSDL生成C#代码,然后它就可以把取得天气预报功能的逻辑补充上而客户端的Java在得到这个WSDL之后,同样可以生成Java代码,然后把相应的约定的接口实现补充上在使用WSDL生成相应语言的代码的过程中,就需要用到一些引擎来实现比如在WebServices中就有:Axis、CXF、XFire等框架,它们就可以根据WSDL 解析成Java代码所以WSDL是一种中立的语言而CORBA架构中也有类似于WSDL的一种东西,叫做IDL,它的语法类似于C++语言,但IDL不是C++UDDI——发现和整合服务类似于JNDI。
java解析wsdl文档获取具体的方法与参数Java解析WSDL文档获取具体的方法与参数WSDL是Web Services Description Language的缩写,是一种基于XML的语言,用于描述Web服务的功能、参数和协议等信息。
WSDL文档定义了Web服务的接口,以及调用Web服务的参数和返回值。
本文将介绍Java中解析WSDL文档获取具体的方法与参数的方法。
1. 使用Java自带工具解析WSDL文档Java自带了一个工具叫做wsimport,用于生成Java客户端代码,并解析WSDL文档。
在终端中执行以下命令:wsimport -keep -verbose [WSDL URL]其中,-keep选项表示保留生成的Java代码,-verbose选项表示显示详细的生成信息。
执行该命令后会在当前目录下生成一个包含WebService端点的Java代码。
2. 使用Apache CXF解析WSDL文档Apache CXF是一个开源的Web服务框架,支持SOAP、REST和XML等协议。
使用Apache CXF可以很方便地生成客户端代码,并解析WSDL文档。
以下是使用Apache CXF解析WSDL的步骤:(1)添加Maven依赖:```<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-bundle</artifactId><version>[版本号]</version></dependency>```(2)使用CxfClientFactoryBean创建客户端对象:```javaCxfClientFactoryBean factory = new CxfClientFactoryBean(); factory.setAddress("[Web服务的地址]");factory.setServiceClass([服务接口类].class);factory.setWsdlLocation("[WSDL文档的URL]");[服务接口类] client = (服务接口类)factory.create();3. 手动解析WSDL文档如果不想使用自带工具或者第三方框架,可以手动解析WSDL文档。
Web Service描述语言WSDL 详解Carlos C. TapangInfotects像Internet协议之类的标准有没有为权威所利用,或者人们这样看待它是因为顺之所获的好处远远超出了代价?曾经有许多试图建立的标准都流产了。
有时候,那些还没有普遍使用的标准甚至由法令或政府规定强行推出:Ada语言就是一例。
我相信正是跟随标准所带来的好处使它广泛接受。
例如,对于铁路服务来说,真正重要的是,不同公司所铺设的铁路结合到一起,或者是来自好几个公司的产品协调的工作在一起。
几家大的企业合力建立了SOAP标准。
Web Service 描述语言(WSDL)向这种Web Service的提供商和用户推出了方便的协调工作的方法,使我们能更容易的获得SOAP的种种好处。
几家公司的铁道并在一起不算什么难事,他们所需遵循的只是两轨间的标准距离。
对Web Service来说,这要复杂得多。
我们必须先制定出指定接口的标准格式。
曾经有人说SOAP并不真需要什么接口描述语言。
如果SOAP是交流纯内容的标准,那就需要一种语言来描述内容。
SOAP消息确实带有某些类型信息,因此SOAP允许动态的决定类型。
但不知道一个函数的函数名、参数的个数和各自类型,怎么可能去调用这个函数呢?没有WSDL,我可以从必备文档中确定调用语法,或者检查消息。
随便何种方法,都必须有人参与,这个过程可能会有错。
而使用了WSDL,我就可以通过这种跨平台和跨语言的方法使Web Service代理的产生自动化。
就像COM和CORBA 的IDL文件,WSDL文件由客户和服务器约定。
注意由于WSDL设计成可以绑定除SOAP以外的其他协议,这里我们主要关注WSDL在HTTP上和SOAP的关系。
同样,由于SOAP目前主要用来调用远程的过程和函数,WSDL支持SOAP传输的文档规范。
WSDL 1.1已经作为记录递交给W3C(见/TR/wsdl.html)WSDL文档结构若要理解XML文档,将之看作块状图表非常有用。
下图以XML的文档形式说明了WSDL的结构,它揭示了WSDL文档五个栏之间的关系。
WSDL文档可以分为两部分。
顶部分由抽象定义组成,而底部分则由具体描述组成。
抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。
这就定义了一系列服务,截然不同的网站都可以实现。
随网站而异的东西如序列化便归入底部分,因为它包含具体的定义。
l 抽象定义Types独立与机器和语言的类型定义Messages包括函数参数(输入与输出分开)或文档描述PortTypes引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)2 具体定义BindingsPortTypes部分的每一操作在此绑定实现Services确定每一绑定的端口地址下面的图中,箭头连接符代表文档不同栏之间的关系。
点和箭头代表了引用或使用关系。
双箭头代表"修改"关系。
3-D的箭头代表了包含关系。
这样,各Messages栏使用Types栏的定义,PortTypes栏使用Messages栏的定义;Bindings栏引用了PortTypes栏,Services栏引用Bindings栏,PortTypes和Bindings栏包含了operation元素,而Services栏包含了port元素。
PortTypes栏里的operation元素由Bindings栏里的operation元素进一步修改或描述。
在此背景中,我将使用标准的XML术语来描述WSDL文档。
Element是指XML 的元素,而"attribute"指元素的属性。
于是:内容也可能由一个或多个元素以递归的方式组成。
根元素是所有元素之中最高级的元素。
子元素总是从属于另一个元素,父元素。
注意,文档之中可能只有一个Types栏,或根本没有。
所有其他的栏可以只有零元素、单元素或是多元素。
WSDL的列表要求所有的栏以固定的顺序出现:import, types, message, portType, binding, service。
所有的抽象可以是单独存在于别的文件中,也可以从主文档中导入。
图一:抽象定义和具体定义WSDL文件示例让我们来研究一下WSDL文件,看看它的结构,以及如何工作。
请注意这是一个非常简单的WSDL文档实例。
我们的意图只是说明它最显著的特征。
以下的内容中包括更加详细的讨论。
xmlns:wsdlns="/wsdl/"xmlns:typens="/xsd"xmlns:xsd="/2001/XMLSchema"xmlns:soap="/wsdl/soap/"xmlns:stk="/soap-toolkit/wsdl-extension" xmlns="/wsdl/"><types><schema targetNamespace="/xsd"xmlns="/2001/XMLSchema"xmlns:SOAP-ENC="/soap/encoding/"xmlns:wsdl="/wsdl/"elementFormDefault="qualified" ></schema></types><message name="Simple.foo"><part name="arg" type="xsd:int"/></message><message name="Simple.fooResponse"><part name="result" type="xsd:int"/></message><portType name="SimplePortType"><operation name="foo" parameterOrder="arg" ><input message="wsdlns:Simple.foo"/><output message="wsdlns:Simple.fooResponse"/></operation></portType><binding name="SimpleBinding" type="wsdlns:SimplePortType"><stk:binding preferredEncoding="UTF-8" /><soap:binding style="rpc"transport="/soap/http"/><operation name="foo"><soap:operation soapAction="/action/Simple.foo"/><input><soap:body use="encoded" namespace="/message/"encodingStyle="/soap/encoding/" /></input><output><soap:body use="encoded" namespace="/message/"encodingStyle="/soap/encoding/" /></output>以下是该实例文档的总述:稍后我将详细讨论每一部分的细节。
第一行申明该文档是XML。
尽管这并不是必需的,但它有助于XML解析器决定是否解析WSDL文件或只是报错。
第二行是WSDL文档的根元素:<definitions>。
一些属性附属于根元素,就像<schema>子元素对于<types>元素。
<types>元素包含了Types栏。
如果没有需要声明的数据类型,这栏可以缺省。
在WSDL范例中,没有应用程序特定的types声明,但我仍然使用了Types栏,只是为了声明schema namespaces。
<message>元素包含了Messages栏。
如果我们把操作看作函数,<message >元素定义了那个函数的参数。
<message>元素中的每个<part>子元素都和某个参数相符。
输入参数在<message>元素中定义,与输出参数相隔离--输出参数有自己的<message>元素。
兼作输入、输出的参数在输入输出的<message>元素中有它们相应的<part>元素。
输出<message>元素以"Response"结尾,就像以前所用的"fooResponse"。
每个<part>元素都有名字和类型属性,就像函数的参数有参数名和参数类型。
用于交换文档时,WSDL允许使用<message>元素来描述交换的文档。
<part>元素的类型可以是XSD基类型,也可以是SOAP定义类型(soapenc)、WSDL定义类型(wsdl)或是Types栏定义的类型。
一个PortTypes栏中,可以有零个、单个或多个<portType>元素。
由于抽象PortType定义可以放置在分开的文件中,在某个WSDL文件中没有<portType>元素是可能的。
上面的例子里只是用了一个<portType>元素。
而一个<portType>元素可在<operation>元素中定义一个或是多个操作。
示例仅使用了一个名为"foo"的<operation>元素。
这和某个函数名相同。
<operation>元素可以有一个、两个、三个子元素:<input>, <output>和<fault>元素。
每个<input>和<output>元素中的消息都引用Message栏中的相关的<message>元素。
这样,示例中的整个<portType>元素就和以下的C函数等效:这个例子足见XML和C相比要冗长的多。
(包括<message>元素,XML在示例中共使用了12行代码来表达相同的单行函数声明。
)Bindings栏可以有零个、一个或者多个<binding>元素。
它的意图是制定每个<operation>通过网络调用和回应。
Services栏同样可以有零个、一个、多个<service>元素。
它还包含了<port>元素,每个<port>元素引用一个Bindings栏里的<binding>元素。