您的位置:首页 > 其它

什么是WSDL

2018-01-30 11:58 295 查看
WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。

<wsdl:definitions name="nmtoken"? targetNamespace="uri">

<import namespace="uri" location="uri"/> *

<wsdl:documentation .... /> ?

<wsdl:types> ?
<wsdl:documentation .... /> ?
<xsd:schema .... /> *
</wsdl:types>

<wsdl:message name="ncname"> *
<wsdl:documentation .... /> ?
<part name="ncname" element="qname"? type="qname"?/> *
</wsdl:message>

<wsdl:portType name="ncname"> *
<wsdl:documentation .... /> ?
<wsdl:operation name="ncname"> *
<wsdl:documentation .... /> ?
<wsdl:input message="qname"> ?
<wsdl:documentation .... /> ?
</wsdl:input>
<wsdl:output message="qname"> ?
<wsdl:documentation .... /> ?
</wsdl:output>
<wsdl:fault name="ncname" message="qname"> *
<wsdl:documentation .... /> ?
</wsdl:fault>
</wsdl:operation>
</wsdl:portType>

<wsdl:serviceType name="ncname"> *
<wsdl:portType name="qname"/> +
</wsdl:serviceType>

<wsdl:binding name="ncname" type="qname"> *
<wsdl:documentation .... /> ?
<-- binding details --> *
<wsdl:operation name="ncname"> *
<wsdl:documentation .... /> ?
<-- binding details --> *
<wsdl:input> ?
<wsdl:documentation .... /> ?
<-- binding details -->
</wsdl:input>
<wsdl:output> ?
<wsdl:documentation .... /> ?
<-- binding details --> *
</wsdl:output>
<wsdl:fault name="ncname"> *
<wsdl:documentation .... /> ?
<-- binding details --> *
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>

<wsdl:service name="ncname" serviceType="qname"> *
<wsdl:documentation .... /> ?
<wsdl:port name="ncname" binding="qname"> *
<wsdl:documentation .... /> ?
<-- address details -->
</wsdl:port>
</wsdl:service>

</wsdl:definitions>


WSDL 端口

元素是最重要的 WSDL 元素。

它可描述一个 web service、可被执行的操作,以及相关的消息。

可以把 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。

操作类型

请求-响应是最普通的操作类型,不过 WSDL 定义了四种类型:

类型 定义

One-way 此操作可接受消息,但不会返回响应。

Request-response 此操作可接受一个请求并会返回一个响应

Solicit-response 此操作可发送一个请求,并会等待一个响应。

Notification 此操作可发送一条消息,但不会等待响应。

One-Way 操作

一个 one-way 操作的例子:

<message name="newTermValues">
<part name="term" type="xs:string"/>
<part name="value" type="xs:string"/>
</message>

<portType name="glossaryTerms">
<operation name="setTerm">
<input name="newTerm" message="newTermValues"/>
</operation>
</portType >


在这个例子中,端口 “glossaryTerms” 定义了一个名为 “setTerm” 的 one-way 操作。

这个 “setTerm” 操作可接受新术语表项目消息的输入,这些消息使用一条名为 “newTermValues” 的消息,此消息带有输入参数 “term” 和 “value”。不过,没有为这个操作定义任何输出。

Request-Response 操作

一个 request-response 操作的例子:

<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>

<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>

<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>


在这个例子中,端口 “glossaryTerms” 定义了一个名为 “getTerm” 的 request-response 操作。

最近在和一家公司做业务接口对接,由他们那边回调我们这边,对方直接扔过来一个webservice的wsdl文件,让我们按照他们的规范来做webservice服务,

大多数的对接应该是我们创建完服务端的webservice服务,让其他公司根据我们的wsdl文件去开发客户端,但是,大公司就是这样,必须要按照他们的规范来。

那问题来了,怎么根据wsdl文件创建服务端呢?

查看wsdl文件的顺序是从下往上


请大家铭记查看wsdl文件的顺序是从下往上看的,不然,你会看懵逼的。

第一步:确定接口的名称



service节点上的name属性值就是这个接口类的名称;



也就是说如果你要根据wsdl文件创建服务端的话就需要你去创建一个名字为:IHelloWord的接口。

第二步:确定接口中都有哪些方法以及方法的名称



找binding节点下的operation子节点中的name属性值



一个operation节点就代码一个方法,也就是在接口中声明几个方法。

第三步:确定接口中方法的参数类型,顺序

假设我要找sayHello方法的参数类型和顺序;

1:找出binding节点对应的porttype节点



2:找出porttype中每一个operation中的input和output对应的message



3:找到message中对应



从上面圈住的部分可以看出来:

sayHello方法有两个参数,第一个参数的类型为String,第二个参数的类型为int。

可以对比一下接口中的方法:

第四步:找出这个服务类中方法的返回值类型

1:找出这个方法所在的porttype节点



2:找出这个porttype中operation中的output指向的message节点



3:找到tyeps节点下name属性值为sayHelloResponse的element节点



从上图中圈住的部分就可以看出,这个返回值为String类。

对比java代码;

第五步:确定对外提供服务的url地址



service中的address节点中有一个location的地址就是对外提供调用的地址



这里的url的第一级目录和二级目录会影响我们的配置;

一级目录影响的是:web.xml中监听器的匹配规则



二级目录影响的是:注册webservice服务的时候指定的名称

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  WSDL WSDL Service