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方法不能对外公开

  • 相关阅读:
    BOI 2002 双调路径
    BOI'98 DAY 2 TASK 1 CONFERENCE CALL Dijkstra/Dijkstra+priority_queue/SPFA
    USACO 2013 November Contest, Silver Problem 2. Crowded Cows 单调队列
    BOI 2003 Problem. Spaceship
    USACO 2006 November Contest Problem. Road Blocks SPFA
    CEOI 2004 Trial session Problem. Journey DFS
    USACO 2015 January Contest, Silver Problem 2. Cow Routing Dijkstra
    LG P1233 木棍加工 动态规划,Dilworth
    LG P1020 导弹拦截 Dilworth
    USACO 2007 February Contest, Silver Problem 3. Silver Cow Party SPFA
  • 原文地址:https://www.cnblogs.com/jiyukai/p/9249046.html
Copyright © 2011-2022 走看看