加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService学习笔记(二)WSDL格式

发布时间:2020-12-16 22:27:19 所属栏目:安全 来源:网络整理
导读:鲁春利的工作笔记 ,谁说程序员不能有文艺范? http://www.ibm.com/developerworks/cn/education/webservices/ws-dewsdl/ws-dewsdl.html WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如

鲁春利的工作笔记,谁说程序员不能有文艺范?



http://www.ibm.com/developerworks/cn/education/webservices/ws-dewsdl/ws-dewsdl.html


WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问,参阅http://www.w3school.com.cn/wsdl/index.asp。

wKiom1ZyV9SgCbJRAAD8SGPngSA411.jpg


1、types

????<types> 元素定义 web service 使用的数据类型。

2、message

????<message> 元素定义一个操作(即portType的operation,也就是方法)的数据元素。

3、portType

????<portType> 元素是最重要的 WSDL 元素,类似于Java接口。

??? 定义了方法的操作,并将message元素合并成操作(operation,即方法参数描述)的参数。

4、binding

????<binding> 元素为每个端口定义消息格式和协议细节。

5、service

????描述binding的连接信息。


通过http://localhost:9000/helloWorld?wsdl可以查看到XML文件,这就是WSDL(WebService Definition Language),将该wsdl文件通过浏览器“将页面另存为”保存为helloWorld.wsdl。

<?xml?version='1.0'?encoding='UTF-8'?>
<wsdl:definitions?name="HelloWorld"?
????targetNamespace="http://server.cxf.webservice.web.apps.lucl.com/"
????xmlns:xsd="http://www.w3.org/2001/XMLSchema"
????xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"?
????xmlns:tns="http://server.cxf.webservice.web.apps.lucl.com/"
????xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"?
????xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
????>
????<!--?定义数据类型?-->
????<wsdl:types>
????????<xs:schema?xmlns:xs="http://www.w3.org/2001/XMLSchema"
????????????xmlns:tns="http://server.cxf.webservice.web.apps.lucl.com/"
????????????elementFormDefault="unqualified"?
????????????targetNamespace="http://server.cxf.webservice.web.apps.lucl.com/"
????????????version="1.0">
????????????<xs:element?name="sayHi"?type="tns:sayHi"?/>
????????????<xs:element?name="sayHiResponse"?type="tns:sayHiResponse"?/>
????????????<xs:complexType?name="sayHi">
????????????????<xs:sequence>
????????????????????<xs:element?minOccurs="0"?name="arg0"?type="xs:string"?/>
????????????????</xs:sequence>
????????????</xs:complexType>
????????????<xs:complexType?name="sayHiResponse">
????????????????<xs:sequence>
????????????????????<xs:element?minOccurs="0"?name="return"?type="xs:string"?/>
????????????????</xs:sequence>
????????????</xs:complexType>
????????</xs:schema>
????</wsdl:types>
????<!--?定义消息分组?-->
????<wsdl:message?name="sayHiResponse">
????????<wsdl:part?element="tns:sayHiResponse"?name="parameters"?/>
????</wsdl:message>
????<wsdl:message?name="sayHi">
????????<wsdl:part?element="tns:sayHi"?name="parameters"?/>
????</wsdl:message>
????<!--?定义port?type?-->
????<wsdl:portType?name="HelloWorldPortType">
????????<wsdl:operation?name="sayHi">
????????????<wsdl:input?message="tns:sayHi"?name="sayHi"?/>
????????????<wsdl:output?message="tns:sayHiResponse"?name="sayHiResponse"?/>
????????????<!--?指定当?Web?服务设法响应客户机的请求时所发生的任何消息级异常?-->
????????????<!--?
????????????<wsdl:fault?name=""?message=""></wsdl:fault>??
????????????-->
????????</wsdl:operation>
????</wsdl:portType>
????<!--?binding操作到特定协议,即关联portType到协议,这里为SOAP?-->
????<!--?W3C?推荐了三个?Web?服务的绑定:
????????????HTTP?上的?SOAP(SOAP?over?HTTP)
????????????HTTP?GET/POST?
????????????SOAP/MIME
????-->
????<wsdl:binding?name="HelloWorldSoapBinding"?type="tns:HelloWorldPortType">
????????<soap:binding?style="document"?transport="http://schemas.xmlsoap.org/soap/http"?/>
????????<wsdl:operation?name="sayHi">
????????????<soap:operation?soapAction=""?style="document"?/>
????????????<wsdl:input?name="sayHi">
????????????????<soap:body?use="literal"?/>
????????????</wsdl:input>
????????????<wsdl:output?name="sayHiResponse">
????????????????<soap:body?use="literal"?/>
????????????</wsdl:output>
????????????<!--?应用portType处的fault?-->
????????????<!--?
????????????<wsdl:fault?name="">
????????????<soap:fault?name=""?use="literal"/>
????????????</wsdl:fault>??
????????????-->
????????</wsdl:operation>
????</wsdl:binding>
????<!--?
????????描述binding的连接信息,根据绑定所实现的?portType?来处理请求。
????????对于?HTTP?上的?SOAP,这就是指向那个进程的?URL。
????-->
????<wsdl:service?name="HelloWorld">
????????<wsdl:port?binding="tns:HelloWorldSoapBinding"?name="HelloWorldPort">
????????????<soap:address?location="http://localhost:9000/helloWorld"?/>
????????</wsdl:port>
????</wsdl:service>
</wsdl:definitions>

完整的 WSDL 语法见http://www.w3school.com.cn/wsdl/wsdl_syntax.asp


1、wsdl:definition

????WSDL的根元素,主要属性为name和targetNamespace两个。
?? ?name为公开的Web服务接口,默认为实现类+Service,可通过WebService的serviceNmae指定;
?? ?targetNamespace指定目标名称空间,属性值同样被后面的xmlns:tns属性作为值,默认是使用接口实现类的包名的反序(http://server.cxf.webservice.web.apps.lucl.com/)。

wKioL1ZycBvDXgR_AAHq-75a8pA940.jpg


2、wsdl:types

wKiom1Zyb4rAPmkdAAQxvKPW4us403.jpg

????xs:schema是定义xml的属性信息,如命名空间,不做介绍,在xml学习笔记中再说明。

??? 通过<xs:element... 和<xs:complexType...对元素进行说明,wsdl2java会根据element生成java类,而根据complexType创建类的属性。
??? 2.1 元素定义<xs:element...

??????? name为定义的方法sayHi以及元素sayHiResponse,

??????? type属性是tns:+name属性对应的方法名。

??????? sayHi是对方法的封装,sayHiResponse是对返回值的封装。
??????? 说明:可以使用WebMethod的operationName属性来自定义名称。

??? 2.2 元素定义<xs:complexType...

??????? 这个元素通过name属性关联到<xs:element...,它为element元素指定封装的具体内容,

????????通过子元素<xs:sequence...指定(参数名和参数类型)。

@WebService(name="HelloWorldPortType")
public?interface?HelloWorld?{
????@WebMethod(operationName="cusSayHi")
????@WebResult(name="sayHiToUser")?String?sayHi(@WebParam(name="text")?String?text);
}

wKioL1ZxMz_RAAlPAAMPGoEZLMg048.jpg


3、wsdl:message

????这个元素将输入参数(方法参数)和响应结果(方法返回值)、受检查的异常信息包装为消息。

wKiom1ZyceKDMzjkAAFF5hWwCmU174.jpg


4、wsdl:portType

wKiom1Zye0WhqL5LAAJpS8-Qqsc778.jpg

????指定Web服务的端口类型(Web服务会被发布为EndPoint端点服务),它的name属性默认为接口名称(可以使用@WebService 注解的name 属性指定值,默认为实现类+Port)。
???? 子元素<wsdl:operation …指定该端点服务包含了那些操作( 方法),input/output指定操作的输入输出(通过属性message 绑定到前面声明过的消息)。

<wsdl:operation…?的子元素
????<wsdl:input?message="tns:sayHi"?name="sayHi"?/>
????<wsdl:output?message="tns:sayHiResponse"?name="sayHiResponse"?/>


5、wsdl:binding

wKioL1ZyfHXDy0A_AALu0fnYzxk497.jpg

????将前面的端点服务绑定到SOAP协议,其中<soap:xxx... 的style、use分别可以使用SOAPBinding注解的style、use属性指定值,<wsdl:operation... 指定公开的操作(方法)。

wKioL1ZxLTCzebLdAAGEyzBeSTw363.jpg


wKiom1ZxLn2RSFBXAAKIJoK-4Zo727.jpg


6、wsdl:service

wKiom1ZyfJzhSo5HAAEsqteyfgM324.jpg

????name 属性指定服务名称。

????与根元素name值相同,可通过WebService的serviceName属性指定,默认为实现类+Service
????子元素<wsdl:port… 的name 属性指定port 名称,可通过WebService的属性portName指定,默认为实现类+Port

????子元素<soap:address … 的location 属性指定Web 服务的地址。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读