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方法都是對外暴露的方法。
(3)WebResult註解
@WebResult 定義返回值,返回值類型不能為接口類或抽象類,而且必須有個不帶參的構造函數,包含屬性
name屬性:返回值的名稱
(4)WebParam註解
@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描述語言)文件介紹