微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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 绑定到前面声明过的消息)。

@H_404_133@<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 服务的地址。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐