WSDL文件解析與處理
一、背景
在工作的時候,偶爾會和第三方系統接口發送數據。他們除了可能會提供接口文檔的方式,也可能會提供一個WSDL文件。第一次拿到WSDL文件可能會不知道如何去使用,此次記錄一下自己在一個項目中遇到的WSDL文件處理。(方案多來自於其他博客)
二、根據WSDL,基於wsimport生成代碼的客戶端
wsimport是jdk自帶的命令,在使用之前。需要使 用終端(win+ R)進入到本地安裝jdk的bin目錄下
#wsimport 命令使用 wsimport -keep -p com.wjin.sim.service.userService -d E:/ll http://localhost:8080/sim/service/userService?wsdl

三、瀏覽器查看wsdl頁面,各個標簽含義
在瀏覽器直接輸入wsdl文件的路徑,如:http://localhost:8080/sim/service/userService?wsdl。就會出現下圖頁面:
標簽簡介:
內容參考自:https://www.cnblogs.com/ChrisMurphy/p/5224314.html
* type元素,定義了交換信息的數據格式。
* 為了實現最大的互操作性(interoperability)和平台中立性(neutrality),WSDL選用XML Schema DataTypes
* 簡稱XSD作為標准類型系統,並將它作為固有類型系統。
<wsdl:definitions xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://impl.XXXXXXX" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/"
targetNamespace="http://impl.XXXXXX"> <wsdl:types> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://impl.XXXXXX"> <xsd:element name="add"> <xsd:complexType> <xsd:sequence> <xsd:element maxOccurs="1" minOccurs="1" name="uid" nillable="true" type="xsd:string"/> <xsd:element maxOccurs="1" minOccurs="1" name="name" nillable="true" type="xsd:string"/> <xsd:element maxOccurs="1" minOccurs="1" name="orgId" nillable="true" type="xsd:string"/> <xsd:element maxOccurs="1" minOccurs="1" name="userTypeId" nillable="true" type="xsd:long"/> <xsd:element maxOccurs="1" minOccurs="1" name="contentXml" nillable="true" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element>
* message元素指定XML 數據類型組成消息的各個部分。message元素用於定義操作的輸入和輸出參數。
* 元素是我們前面定義 *的types中的元素;
* 如果采用RPC樣式的消息傳遞,只需要將文檔中的element元素應以修改為type即可。
* service元素。服務元素包含一組port元素。端口將端點與來自服務接口定義的binding 元素關聯起來。
* port指定一個綁定的地址,這樣定義一個通信的終端。
*service:一個webservice的容器
*name:它用以指定一個服務器處理端口請求的入口(就是SEI的實現)
* binding:引用上面定義的<binding>
*address:當前webservice的請求地址
<wsdl:service name="userService"> <wsdl:port name="userServiceHttpPort" binding="tns:userServiceHttpBinding"> <wsdlsoap:address location="http://cnsvwshvm12093.csvw.com:9080/sim/service/userService"/> </wsdl:port> </wsdl:service>