WebService学习笔记(二)WSDL格式
鲁春利的工作笔记,谁说程序员不能有文艺范? 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两个。 2、wsdl:types ????xs:schema是定义xml的属性信息,如命名空间,不做介绍,在xml学习笔记中再说明。 ??? 通过<xs:element... 和<xs:complexType...对元素进行说明,wsdl2java会根据element生成java类,而根据complexType创建类的属性。 ??????? name为定义的方法sayHi以及元素sayHiResponse, ??????? type属性是tns:+name属性对应的方法名。 ??????? sayHi是对方法的封装,sayHiResponse是对返回值的封装。 ??? 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…?的子元素 ????<wsdl:input?message="tns:sayHi"?name="sayHi"?/> ????<wsdl:output?message="tns:sayHiResponse"?name="sayHiResponse"?/> 5、wsdl:binding ????将前面的端点服务绑定到SOAP协议,其中<soap:xxx... 的style、use分别可以使用SOAPBinding注解的style、use属性指定值,<wsdl:operation... 指定公开的操作(方法)。 6、wsdl:service ????name 属性指定服务名称。 ????与根元素name值相同,可通过WebService的serviceName属性指定,默认为实现类+Service。 ????子元素<soap:address … 的location 属性指定Web 服务的地址。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |