wsdl,什么是wsdl
大家好,今天我将为大家揭秘wsdl和什么是wsdl的奥秘,希望我的分享能给你带来新的启发和知识。
什么是wsdl
读懂WSDL
1. WSDL是什么
WSDL指网络服务描述语言(Web Services Description Language)。是一种使用 XML编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。
2. WSDL文档结构
WSDL文档是利用这些主要的元素来描述某个 web service的:
元素
定义
<portType>
最重要的 WSDL元素,它可描述一个 web service可被执行的操作以及相关的消息。
可以把<portType>元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。
<message>
用于描述一个操作的数据元素。每个消息均由一个或多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。
<types>
web service使用的数据类型定义。为了最大程度的平台中立性,WSDL使用 XML Schema语法来定义数据类型。
<binding>
web service使用的通信协议元素。为每个端口定义消息格式和协议细节。
一个 WSDL文档的主要结构
l抽象定义
Types独立与机器和语言的类型定义
Messages包括函数参数(输入与输出分开)或文档描述
PortTypes引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)
2具体定义
Bindings PortTypes部分的每一操作在此绑定实现
Services确定每一绑定的端口地址
文档形式为:
<definitions>
<types>
definition of types........
</types>
<message>
definition of a message....
</message>
<portType>
definition of a port.......
</portType>
<binding>
definition of a binding....
</binding>
</definitions>
WSDL文档可包含其它的元素,比如 extension元素,以及一个 service元素,此元素可把若干个 web services的定义组合在一个单一的 WSDL文档中。
2.1.WSDL文档实例
欢迎光临DIY部落,点击这里查看更多文章教程......
参考地址:http://www.diybl.com/course/3_program/java/javajs/2008315/104672.html
WSDL概述
WSDL就是描述XML Web服务的标准XML格式,WSDL由Ariba、Intel、IBM和微软等开发商提出。它用一种和具体语言无关的抽象方式定义了给定Web服务收发的有关操作和消息。就其定义来说,你还不能把WSDL当作一种对象接口定义语言,例如,CORBA或COM等应用程序体系结构就会用到对象接口定义语言。 WSDL保持协议中立,但它确实内建了绑定SOAP的支持,从而同SOAP建立了不可分割的联系。所以,当我在这篇文章中讨论WSDL的时候,我会假定你把SOAP作为了你的通讯协议。
————————————————————————————
WSDL协议已经被提交给了Internet标准组织W3C审批,目前还处于“确认提交”状态。W3C维持着正规的标准化系统同时提交提案必须经过确定的一套批准过程才能最终成为官方协议。在这种情况下,WSDL的地位,照外行看,至少标准组织在考虑让其成为将来可能标准中的一部分。如果你对这方面的情况感兴趣,或碰巧是一位特关心结果的“失眠症患者”,那么你不妨到W3C网站上去读读有关的建议标准。
用WSDL说明服务
作为一种基于XML的标准,如果你对XML具有一定的了解,那么WSDL的结构对你就不会陌生了。WSDL文档由服务用来描述数据类型的一组元素、服务可以收到的“消息”以及关联每条消息的SOAP绑定组成。
清单A就是一份简单的WSDL文档,该文档同W3C网站公布的WSDL示范文本是一样的,它说明了一种股票行情服务(这也是相当标准的一种Web服务)。
再仔细阅读清单A,你可以看到,文档首先以标准的XML头开头,其中包含了一个版本标识,而文档的根元素则被称为definitions。
Definitions元素可以采用若干种可选属性,这些属性说明文档同时定义文档其余部分使用的名称空间(namespace)。在这种情况下,定义被分配了一个名字(StockQuote),某些名称空间定义是根据以下常规前缀缩写制定的:
tns—“this namespace”的缩写,包含被定义服务的主名称空间
xsdl—XML Schema(XSD)名称空间,用于定义文档中的类型
soap—SOAP绑定采用的名称空间
接下来,为了定义服务的接口需要在type元素内定义所需要的任何复杂类型。这里你必须注意使用标准的XSD句法(属性),它是创造数据类型定义最为适合的方法。不过,如果你愿意,WSDL也能扩展使用不同的类型定义系统。
消息概述
按WSDL的用法,消息可以是传递给某一服务公布对象上的方法的任何参数或者方法被调用之后的任何返回结果。为了继续使用股票行情这个Web服务例子,单一定义方法多半如以下伪代码所示:
floatgetLastTradePrice(string tickerSymbol)
这样,就像你从清单A所看到的那样,文档中定义了两条消息,一条代表方法的输入参数tickerSymbol(GetLastTradePriceInput消息)另一条代表该方法的返回值(GetLastTradePriceResult消息)——最新的股票价格。
操作把消息组织到一起而且抽象地代表方法定义。在我们的例子中,这两条消息都在 GetLastTradePrice操作元素下的getLastTradePrice对象方法定义中组织起来。在一个 WSDL文件中的所有操作又都挨个在portType元素内分组。
WSDL文档的余下部分采用服务器上的侦听端点(binding元素)绑定消息同时把端口定义同单一服务实体(service元素)组合起来。清单A的例子就定义了通过SOAP采用服务所需要的绑定。
WSDL工具
你可以手工创建WSDL文件,不过,你还可以采用相当多的工具通过WSDL来为你自动处理和定义Web服务。推荐工具软件如下:
Omniopera—一图形用户界面的WSDL、XML和XSD编辑器
Microsoft的SOAP Toolkit—一种工具包,其中包括根据WSDL定义创建COM接口的向导程序,还包括根据COM接口创建WSDL的向导程序
IBM的Web Services Toolkit—一种工具包,其中包括产生WSDL和SOAP部署说明的向导程序
参考网址:
http://iask.sina.com.cn/b/11632650.html
wsdl 是什么
你可能会自己写一套文档,
你甚至可能会口头上告诉需要使用你的Web service的人。这些非正式的方法至少都有一个严重的问题:
当程序员坐到电脑前,想要使用你的Web service的时候,他们的工具(如Visual Studio)无法给他们提供任何帮助,
因为这些工具根本就不了解你的Web service。解决方法是:
用机器能阅读的方式提供一个正式的描述文档。Web service描述语言(WSDL)
就是这样一个基于XML的语言,用于描述Web service及其函数、参数和返回值。因为是基于XML的,
所以WSDL既是机器可阅读的,又是人可阅读的,
这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,
生成调用相应Web service的代码。
==============================
==============================
====================================WSDL用来提供对服务的描述,它的主要构成要素有五个:
1)Types:定义WSDL定义中所用到的数据类型,即XML Schema Types
2)Message:对一组消息的输入和输出参数的定义
如何获取天气预报的wsdl
Java调用以WSDL形式发布的web service
webservice的发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。今天搜索到了非常好的 webservice provider列表
http://www.webservicex.net/WCF/default.aspx
这上面列出了70多个包括很多方面的free webservice provider,utilities->global weather就可以获取全球的天气预报。
下面我们来看Java如何通过WSDL文件来调用这些web service:
注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法。
1,直接AXIS调用远程的web service
我觉得这种方法比较适合那些高手,他们能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下:
import java.util.Date;
import java.text.DateFormat;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.lang.Integer;
import javax.xml.rpc.ParameterMode;
public class caClient{
public static void main(String[] args){
try{
String endpoint="http://localhost:8080/ca3/services/caSynrochnized?wsdl";
//直接引用远程的wsdl文件
//以下都是套路
Service service= new Service();
Call call=(Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("addUser");//WSDL里面描述的接口名称
call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
String temp="测试人员";
String result=(String)call.invoke(new Object[]{temp});
//给方法传递参数,并且调用方法
System.out.println("result is"+result);
}
感谢您花时间阅读本文!我们希望通过对wsdl和什么是wsdl的问题进行探讨,为您提供了一些有用的见解和解决方案。如果您需要更多帮助或者有其他疑问,请不要犹豫与我们联系。