什么是WSDL

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_第1张图片

请大家铭记查看wsdl文件的顺序是从下往上看的,不然,你会看懵逼的。
第一步:确定接口的名称
什么是WSDL_第2张图片
service节点上的name属性值就是这个接口类的名称;
什么是WSDL_第3张图片
也就是说如果你要根据wsdl文件创建服务端的话就需要你去创建一个名字为:IHelloWord的接口。
第二步:确定接口中都有哪些方法以及方法的名称
这里写图片描述
找binding节点下的operation子节点中的name属性值
什么是WSDL_第4张图片
一个operation节点就代码一个方法,也就是在接口中声明几个方法。
第三步:确定接口中方法的参数类型,顺序
假设我要找sayHello方法的参数类型和顺序;
1:找出binding节点对应的porttype节点
什么是WSDL_第5张图片
2:找出porttype中每一个operation中的input和output对应的message
什么是WSDL_第6张图片
3:找到message中对应
什么是WSDL_第7张图片

从上面圈住的部分可以看出来:
sayHello方法有两个参数,第一个参数的类型为String,第二个参数的类型为int。
可以对比一下接口中的方法:
第四步:找出这个服务类中方法的返回值类型
1:找出这个方法所在的porttype节点
什么是WSDL_第8张图片
2:找出这个porttype中operation中的output指向的message节点
什么是WSDL_第9张图片
3:找到tyeps节点下name属性值为sayHelloResponse的element节点
什么是WSDL_第10张图片

从上图中圈住的部分就可以看出,这个返回值为String类。
对比java代码;
第五步:确定对外提供服务的url地址
什么是WSDL_第11张图片
service中的address节点中有一个location的地址就是对外提供调用的地址
什么是WSDL_第12张图片
这里的url的第一级目录和二级目录会影响我们的配置;
一级目录影响的是:web.xml中监听器的匹配规则
什么是WSDL_第13张图片
二级目录影响的是:注册webservice服务的时候指定的名称
什么是WSDL_第14张图片

你可能感兴趣的:(JAVA开发)