「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战」
wsdl
介绍
Web Service Description Language 网络服务描述语言.基于XML的语言,用于描述WebServices以及如何访问.
简而言之,教你怎么通过xml文档能够正确访问webService接口.
文档结构
利用主要的一些元素来描述webService
-
<portType>:webService执行的操作- 可以理解成一个service类,用于执行某些方法
-
<message>:webService使用的消息- 可以理解成函数调用的参数
-
<types>:webService 的数据类型- 数据类型
-
<binding>:webService 使用的通信协议- 协议细节
参考文档
<definitions xmlns:wsu="<http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd>" xmlns:wsp="<http://www.w3.org/ns/ws-policy>" xmlns:wsp1_2="<http://schemas.xmlsoap.org/ws/2004/09/policy>" xmlns:wsam="<http://www.w3.org/2007/05/addressing/metadata>" xmlns:soap="<http://schemas.xmlsoap.org/wsdl/soap/>" xmlns:tns="<http://service.testweb.study.com/>" xmlns:xsd="<http://www.w3.org/2001/XMLSchema>" xmlns="<http://schemas.xmlsoap.org/wsdl/>" targetNamespace="<http://service.testweb.study.com/>" name="WebServiceImplService">
<types>
<xsd:schema>
<xsd:import namespace="<http://service.testweb.study.com/>" schemaLocation="<http://localhost:8181/service/webService?xsd=1>"/>
</xsd:schema>
</types>
<message name="trans">
<part name="parameters" element="tns:trans"/>
</message>
<message name="transResponse">
<part name="parameters" element="tns:transResponse"/>
</message>
<portType name="WebServiceImpl">
<operation name="trans">
<input wsam:Action="<http://service.testweb.study.com/WebServiceImpl/transRequest>" message="tns:trans"/>
<output wsam:Action="<http://service.testweb.study.com/WebServiceImpl/transResponse>" message="tns:transResponse"/>
</operation>
</portType>
<binding name="WebServiceImplPortBinding" type="tns:WebServiceImpl">
<soap:binding transport="<http://schemas.xmlsoap.org/soap/http>" style="document"/>
<operation name="trans">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="WebServiceImplService">
<port name="WebServiceImplPort" binding="tns:WebServiceImplPortBinding">
<soap:address location="<http://localhost:8181/service/webService>"/>
</port>
</service>
</definitions>
definitions
定义文档中需要用到的各个xml元素的namespace缩写和关键属性指向的前缀
<definitions xmlns:wsu="<http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd>"
xmlns:wsp="<http://www.w3.org/ns/ws-policy>" xmlns:wsp1_2="<http://schemas.xmlsoap.org/ws/2004/09/policy>"
xmlns:wsam="<http://www.w3.org/2007/05/addressing/metadata>" xmlns:soap="<http://schemas.xmlsoap.org/wsdl/soap/>"
xmlns:tns="<http://service.testweb.study.com/>" xmlns:xsd="<http://www.w3.org/2001/XMLSchema>"
xmlns="<http://schemas.xmlsoap.org/wsdl/>"
targetNamespace="<http://service.testweb.study.com/>"
name="WebServiceImplService">
xmlns:tns="<http://service.testweb.study.com/>" 这东西不就是service所在目录的反路径吗?测试了一下,改变路径名,这边的也会随之改变,那么确实是相同的路径.
types:定义数据类型
demo中没有内容,截取其他的wsdl片段来讲解.
element:定义的一个复杂类型,包含一个字符串(type="s:string").作为参数传入部分(name="inputParam"),相对应的是出参
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="<http://tempuri.org/>">
<s:element name="Hander">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="inputParam" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="HanderResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="HanderResult" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
portType
portType:指的是WebServiceImpl类这个服务类,而operation指的是执行trans这个方法.input是入参.output是出参
<portType name="WebServiceImpl">
<operation name="trans">
<input wsam:Action="<http://service.testweb.study.com/WebServiceImpl/transRequest>" message="tns:trans"/>
<output wsam:Action="<http://service.testweb.study.com/WebServiceImpl/transResponse>" message="tns:transResponse"/>
</operation>
</portType>
上面的出入参的message指向了下面的两个元素.trans和transResponse分别为入参合集和出参合集
<message name="trans">
<part name="parameters" element="tns:trans"/>
</message>
<message name="transResponse">
<part name="parameters" element="tns:transResponse"/>
</message>
binging:规定协议,格式等
binding 有两个属性,name和type.代表名称和指向用于binding的端口→WebServiceImpl
soap:binding 有两个属性,style和transport. style可取rpc或者document.
transport定义了使用的SOAP协议,在这里我们使用http协议.
对输入输出使用literal进行编码
<binding name="WebServiceImplPortBinding" type="tns:WebServiceImpl">
<soap:binding transport="<http://schemas.xmlsoap.org/soap/http>" style="document"/>
<operation name="trans">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>