WSDL⽂件详解
WSDL⽂件详解
⼀、WSDL简介
W3school 上的定义:WSDL 指 WSDL 指⽹络服务描述语⾔ (Web Services Description Language)。WSDL 是⼀种使⽤ XML 编写的⽂档。这种⽂档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或⽅法)。其中我们可以得知⼏点:
1、WSDL是XML⽂档。
2、WSDL描述了某个web service 。如何描述的呢?规定了服务的位置和该服务内有哪些⽅法。
这其实也可以认为是描述了某个接⼝,并指出了接⼝的位置,看到这个⽂档可以调⽤某个接⼝了。
⼆、WSDL⽂档结构
(⼀)端⼝
元素是最重要的 WSDL 元素。它可描述⼀个 web service、可被执⾏的操作,以及相关的消息。可以看
作⼀个模块。
如下:
<portType name="PAPNManagementPortType">
<!-- operation 相当于该类⾥有⼀个⽅法名,⽅法名为processAPNManagement -->
<operation name="processAPNManagement">
<!--input ⽅法⾥有⼀个输⼊消息 -->
<input name="APNMRequest"message="tns:APNMRequest"/>
<!--output ⽅法⾥有⼀个输出消息 -->
<output name="APNMResponse"message="tns:APNMResponse"/>
<!--fault ⽅法⾥有⼀个错误消息 -->
<fault name="FaultMessage"message="tns:FaultMessage"/>
</operation>
</portType>
portType 相当于⼀个类。
operation 相当于该类⾥有⼀个⽅法名,⽅法名为processAPNManagement,该⽅法⾥有⼀个输⼊消息,⼀个输出消息,⼀个错误消息。
WSDL 消息
元素定义⼀个操作的数据元素。每个消息可以传递⼀个或者多个参数。
(⼆)WSDL types
元素定义 web service 使⽤的数据类型。为了最⼤程度的平台中⽴性,WSDL 使⽤ XML Schema 语法来定义数据类型。即定义了各种参数(请求和返回的各种参数的数据类型定义)。
(三)WSDL Bindings
binding 元素有两个属性 - name 属性和 type 属性。name 属性定义 binding 的名称,⽽ type 属性指向
⽤于 binding 的端⼝,在这个例⼦中是 “tns:PAPNManagementPortType” 端⼝。
soap:binding 元素有两个属性 - style 属性和 transport 属性。style 属性可取值 “rpc” 或 “document”。transport 属性定义了要使⽤的 SOAP 协议。在这个例⼦中我们使⽤ HTTP。
style 属性可取值 “rpc” 或 “document”。rpc是远程过程调⽤约定。使⽤⽂档document样式时,客户端知道应该使⽤ XML模式。transport 属性定义了要使⽤的 SOAP 协议。WSDL 规范通常描述三种绑定扩展:HTTP GET/POST、MIME 以及 SOAP version
1.1。HTTP GET/POST 和 MIME 中定义的绑定扩展⽤来定义与标准的 Web 应⽤程序进⾏通信的需求,这些应⽤程序可能返回(也可能不返回)XML ⽂档。在发送或返回 XML ⽂档时,HTTP GET/POST 绑定的扩展是隐式的⽂档样式。
operation 元素定义了每个端⼝提供的操作符。不管soap:binding元素中的声明如何,soap:operation元素可以覆盖每个操作的声明,对于每个操作,相应的 SOAP ⾏为都需要被定义。同时您必须如何对输⼊和输出进⾏编码。在这个例⼦中我们使⽤了 “literal”。
三、如何看⼀个完整的WSDL⽂档
⾸先,WSDL⽂档最开始应该从下往上看,这⼀⽐较容易。
例⼦:
<?xml version="1.0" encoding="UTF-8"?>
<!-- WSDL 端⼝类型 -->
<!-- ⽬标名称空间⽬标命名空间⼀定是有效的,其他命名空间不⼀定有效。-->
<definitions name="PAPNManagementPortType"
targetNamespace="gg.ericsson/PAPNManagementPortType/"
ns="/soap/encoding/"
wsdl="/wsdl/"
tns="gg.ericsson/PAPNManagementPortType/"
xsd="/2001/XMLSchema"soap="/wsdl/soap/">
<types>
<schema attributeFormDefault="unqualified"
elementFormDefault="unqualified"
targetNamespace="gg.ericsson/PAPNManagementPortType/"
tns="gg.ericsson/PAPNManagementPortType/"
xs="/2001/XMLSchema">
<!-- 3.3:到message中对应复杂类型complexType APNMRequest-APNMRequestType sequence 下的元素element为传⼊的参数和参数类型--->
<element name="APNMRequest"type="tns:APNMRequest"/>
<element name="APNMResponse"type="tns:APNMResponse"/>
<element name="FaultMessage"type="tns:FaultMessage"/>
<complexType name="APNMRequest">
<sequence>
<element name="Request"type="tns:APNMRequestType"/>
</sequence>
</complexType>
<complexType name="APNMRequestType">
<sequence>
<element name="MSISDN"type="xs:string"/>
<element name="APN_Type"type="xs:string"/>
<element name="Transaction_Type"type="xs:string"/>
<element name="Request_ID"type="xs:string"/>
<element name="Request_Date_Time"type="xs:string"/>
</sequence>
</complexType>
<!-- 4.3:到tyeps节点下name属性值为APNMResponse的element节点
其返回的类型即为APNMResponseType类型⽂件。该⽂件的结构在命名空间xmlns:tns中APNMResponseType元素中在此例⼦中,该命名空间指向本⽂件。即返回APNMResponseType中的三个参数,该三个参数包装在⼀个对象中,即返回⼀个对象。-->
<complexType name="APNMResponse">
<sequence>
<element name="Request"type="tns:APNMResponseType"/>
</sequence>
</complexType>
<complexType name="APNMResponseType">
<sequence>
<element name="Result_Code"type="xs:string"/>
<element name="Result_Date_Time"type="xs:string"/>
<element name="Result_Description"type="xs:string"/>
</sequence>
</complexType>
<complexType name="FaultMessage">
<sequence>
<element minOccurs="0"name="FaultCode"type="xs:integer"/>
<element minOccurs="0"name="FaultMessage"type="xs:string"/>
<element minOccurs="0"name="FaultActor"type="xs:string"/>
<element minOccurs="0"name="FaultDetail"type="xs:string"/>
</sequence>
</complexType>
</schema>
</types>
<!-- 3.2:出这个porttype中operation中的input指向的message节点 -->
<!-- 4.2:出这个porttype中operation中的output指向的message节点 -->
<message name="APNMResponse">
<part name="parameters"element="tns:APNMResponse"/>
</message>
<message name="FaultMessage">
<part name="parameters"element="tns:FaultMessage"/>
</message>
<message name="APNMRequest">
<part name="parameters"element="tns:APNMRequest"/>
</message>
<!-- 第⼆步:确定接⼝中都有哪些⽅法以及⽅法的名称:processAPNManagement ⼀个operation节点就代表⼀个⽅法,也就是在接⼝中声明⼏个⽅法。--> <!-- 第三步:确定接⼝中⽅法的参数类型,顺序 portType PAPNManagementPortType
假设我要processAPNManagement⽅法的参数类型和顺序;
3.1:出binding节点对应的porttype节点
根据binding节点为tns:PAPNManagementPortType,出porttype节点PAPNManagementPortType-->
<!-- 第四步:出这个服务类中⽅法的返回值类型
4.1:出这个⽅法所在的porttype节点 PAPNManagementPortType -->
<portType name="PAPNManagementPortType">
<!-- 2:出porttype中每⼀个operation中的input和output对应的message -->
<operation name="processAPNManagement">
<input name="APNMRequest"message="tns:APNMRequest"/>
<output name="APNMResponse"message="tns:APNMResponse"/>
<fault name="FaultMessage"message="tns:FaultMessage"/>
</operation>
</portType>
<binding name="PAPNMServiceSoapBinding"
type="tns:PAPNManagementPortType">
<binding
transport="/soap/http"/>
<operation name="processAPNManagement">
<operation />service fault
<input>
<body use="literal"/>
</input>
<output>
<body use="literal"/>
</output>
<fault name="FaultMessage">
<fault name="FaultMessage"use="literal"/>
</fault>
</operation>
</binding>
<!-- 第⼀步:确定接⼝的名称:ProcessAPNManagementService -->
<service name="ProcessAPNManagementService">
<port name="ProcessAPNManagementPort"binding="tns:PAPNMServiceSoapBinding">
<!-- 第五步:确定对外提供服务的url地址
这⾥的url的第⼀级⽬录和⼆级⽬录会影响我们的配置;
⼀级⽬录影响的是:l中的匹配规则
⼆级⽬录影响的是:注册webservice服务的时候指定的名称-->
<address location="localhost:8080/LIG_cxf/services/ProcessAPNManagementPort"/>
</port>
</service>
</definitions>
第⼀步:确定接⼝的名称:wsdl:service name=“ProcessAPNManagementService”
第⼆步:确定接⼝中都有哪些⽅法以及⽅法的名称:processAPNManagement ⼀个operation节点就代表⼀个⽅法,也就是在接⼝中声明⼏个⽅法。
第三步:确定接⼝中⽅法的参数类型和顺序 portType PAPNManagementPortType
假设我要processAPNManagement⽅法的参数类型和顺序;
3.1:出binding节点对应的vporttype节点,根据binding节点为tns:PAPNManagementPortType,出端⼝porttype节点PAPNManagementPortType
3.2:出这个porttype中operation中的input指向的message节点
3.3.:到message中对应 复杂类型complexType APNMRequest-APNMRequestType sequence 下的元素element为传⼊的参数和参数类型
第四步:出这个服务类中⽅法的返回值类型
4.1:出这个⽅法所在的porttype节点 PAPNManagementPortType
4.2:出porttype中每⼀个operation中的input和output对应的message
4.3:到tyeps节点下name属性值为APNMResponse的element节点
其返回的类型即为APNMResponseType类型⽂件。该⽂件的结构在命名空间xmlns:tns中APNMResponseType元素中 在此例⼦中,该命名空间指向本⽂件。即返回APNMResponseType中的三个参数,该三个参数包装在⼀个对象中,即返回⼀个对象。
第五步:确定对外提供服务的url地址
这⾥的url的第⼀级⽬录和⼆级⽬录会影响我们的配置;
⼀级⽬录影响的是:l中的匹配规则
⼆级⽬录影响的是:注册webservice服务的时候指定的名称
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论