鲁春利的工作笔记,谁说程序员不能有文艺范?
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。
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/)。
2、wsdl:types
xs:schema是定义xml的属性信息,如命名空间,不做介绍,在xml学习笔记中再说明。
通过<xs:element... 和<xs:complexType...对元素进行说明,wsdl2java会根据element生成java类,而根据complexType创建类的属性。
2.1 元素定义<xs:element...
name为定义的方法sayHi以及元素sayHiResponse,
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); }
3、wsdl:message
这个元素将输入参数(方法参数)和响应结果(方法返回值)、受检查的异常信息包装为消息。
4、wsdl:portType
指定Web服务的端口类型(Web服务会被发布为EndPoint端点服务),它的name属性默认为接口名称(可以使用@WebService 注解的name 属性指定值,默认为实现类+Port)。
子元素<wsdl:operation …指定该端点服务包含了那些操作( 方法),input/output指定操作的输入输出(通过属性message 绑定到前面声明过的消息)。
5、wsdl:binding
将前面的端点服务绑定到SOAP协议,其中<soap:xxx... 的style、use分别可以使用SOAPBinding注解的style、use属性指定值,<wsdl:operation... 指定公开的操作(方法)。
6、wsdl:service
与根元素name值相同,可通过WebService的serviceName属性指定,默认为实现类+Service。
子元素<wsdl:port… 的name 属性指定port 名称,可通过WebService的属性portName指定,默认为实现类+Port。
子元素<soap:address … 的location 属性指定Web 服务的地址。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。