1. 程式人生 > >WSDL(WebService描述語言)文件介紹

WSDL(WebService描述語言)文件介紹

param 端口 返回 sar wsdl文件 inpu 介紹 最重要的 參數

一、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方法不能對外公開

WSDL(WebService描述語言)文件介紹