zoukankan      html  css  js  c++  java
  • WSDL(WebService描述语言)文件介绍

    一、WSDL  

      1、WSDL 文档的组成部分

      <portType>web service 执行的操作

      <message>web service 使用的消息

      <types>web service 使用的数据类型

      <binding>web service 使用的通信协议

      2、WSDL元素介绍

            WSDL规范为了不会产生歧义,定义了特有名词来表述功能与服务。

      <portType> :<portType>元素是最重要的 WSDL 元素。 它可描述一个 Web Service、可被执行的操作,以及相关的消息。 可以把 <portType> 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。

      <operation><operation>是对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。

      <message> <message>元素定义一个操作的数据元素。 每个消息均由一个或多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。

      <types>: <types>元素定义WebService 使用的数据类型。为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。

      <binding>: <binding>元素为每个端口定义消息格式和协议细节。

      3、WSDL 文档的简化片段示例 

    <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> 

      A在这个例子中,<portType> 元素把 "glossaryTerms" 定义为某个端口的名称,把 "getTerm" 定义为某个操作的名称。

      B操作 "getTerm" 拥有一个名为 "getTermRequest" 的输入消息,以及一个名为 "getTermResponse" 的输出消息。

      C<message> 元素可定义每个消息的部件,以及相关联的数据类型。

      备注:具体的WSDL语法详见附件《WebService描述语言WSDL详解.pdf》

         https://files.cnblogs.com/files/jiyukai/WebService描述语言WSDL详解.pdf

    二、使用WebService注解来修改WSDL文件

      1、 WebService注解概述

      WSDL文件的内容,一般由服务默认生成,但为了更好的向开发人员提供使用说明书,一般应做一些简单的修改。至少不应该暴露我们的包结构。而targetNamespace默认情况下为倒置的包名,这已经暴露了我们的包结构。通过在类文件上添加以下注解,可以修改wsdl生成的各元素,而不是直接去修改wsdl文件,直接去修改wsdl文件是无效的。

      WebService的注解包括:

      A、 @WebService-定义服务   — 注解位置:类名

      B、 @WebMethod-定义方法   - 注解位置:方法

      C、 @WebResult-定义返回值 – 注解位置:返回值

      D、@WebParam-定义参数 – 注解位置:方法参数

      2、 WebService注解类型详解

      (1)WebService注解

      @WebService标注要暴露为Web Services的类或接口 ,用于修饰类或接口,包含的属性有:

      targetNamespace属性:定义命名空间,默认为”http://”+”包名倒排”

      name属性:Web Service 的名称,默认为发布服务的类名。

      serviceName: ws服务的名词,默认在类名后面添加了service

      endpointInterface属性:定义服务抽象 Web Service 协定的服务端点接口的完整名称,接口也必须声明WebService注解,包括方法的注解必须也要添加到接口中,否则会无效, 而且WS在没有注解的情况下.生成WS的时候会自动生成一个注解.所以可以不用指定接口。

       

      (2)WebMethod注解

           @WebMethod此注解用在方法上,用于修改对外暴露的方法,包含的属性有:

      operationName属性:与此方法匹配的 wsdl:operation 的名称

      exclude属性:标注此方法是否被暴露,默认为false

        

      注意:如果所有public方法上都没有指定@WebMethod,则默认是所有的public方法都是对外暴露的方法。

      3WebResult注解

      @WebResult 定义返回值,返回值类型不能为接口类或抽象类,而且必须有个不带参的构造函数,包含属性

      name属性:返回值的名称

      

      4WebParam注解

            @WebParam用来修改参数名字,如上图示例

      name属性:参数的名称

    三、 WebService注解注意事项

      (1)通过WebService的注解,可以更加形像的描述Web服务。从而生成WSDL文档。

      (2)当修改了WebService注解之后,同时会影响客户端生成的代码。

      (3)调用的方法名和参数名也发生了变化。

      (4)即使是没有修改源代码,只修改了注解,客户端的代码也必须要重新生成(注意是生成而不是下载)。否则调用将会失败。

      (5)生成本地调用代码,依然使用wsimport工具

      (6)给类添加上@WebService注解后,类中所有的非静态方法都将会对外公布

      (7)如果希望某个方法不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。

      (8)如果一个类上,被添加了@WebService注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。

      (9)protected、private、final、static方法不能对外公开

  • 相关阅读:
    Hadoop学习笔记——配置文件
    Hive学习笔记——SerDe
    MapReduce中的OutputFormat
    Nginx 转发时的一个坑,运维居然让我背锅!!
    教你用 Netty 实现一个简单的 RPC!
    完整的支付系统整体架构!
    String 拼接一定会走 StringBuilder?
    腾讯牛逼!终于开源了自家的 Tencent JDK——Kona!!
    Java 数组转 List 的 3 种方式,哪种性能最牛?
    Spring Boot 2.4.0 发布,配置文件重大调整,不要乱升级!!
  • 原文地址:https://www.cnblogs.com/jiyukai/p/9249046.html
Copyright © 2011-2022 走看看