樂在其中

          以JEE為主攻,以Flex為點(diǎn)綴,以Eclipse RCP為樂趣
          請(qǐng)?jiān)L問(wèn)http://www.inframesh.org

          首頁(yè) 新隨筆 聯(lián)系 管理
            43 Posts :: 0 Stories :: 8 Comments :: 0 Trackbacks

          最近寫Web service, 很多代碼是用工具生成的,可以說(shuō)只知其然,不知其所以然。于是,去網(wǎng)上搜了寫wsdl的規(guī)范看了看,初步理了理頭緒,總結(jié)一下。

          1. wsdl文件格式的結(jié)構(gòu)比較固定,總共分那么幾塊:definitions/type/message/portType/binding/service,每一塊handle不同的職責(zé)

          2. 一般建議定義單獨(dú)的xml schema, 然后在不同的wsdl中復(fù)用

          3. 綁定部分很靈活,你可以選擇不同的協(xié)議綁定,我們主要綁定到soap

          4. server-side和client-side部分的代碼生成可以借助不同的工具,我使用的axis2. 不過(guò)生成的代碼比較難看。axis2是個(gè)SOAP engin

          具體wsdl詳解可以參考天極網(wǎng)的一個(gè)專題:http://www.yesky.com/zhuanti/259/200759.shtml

          下面是就我寫的一個(gè)wsdl文件做得注解:

          <?xml version="1.0" encoding="UTF-8"?>
          <wsdl:definitions 
              targetNamespace="http://services.icms.********.com/abstraction/atomic/icms/splitRawCollateral/"
              xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
              xmlns:tns="http://services.icms.********.com/abstraction/atomic/icms/splitRawCollateral/" 
              xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
              xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
              name="splitRawCollateral">
          <!--  
          xmlns:soap, xmlns:tns, xmlns:wsdl, xmlns:xsd分別定義了命名空間縮寫,后面就可以如下使用:soap:int ..
          xmlns:tns 一般指當(dāng)前namespace的縮寫(ThisNameSpace),即與targetNamespace相同
          -->
           
            <!-- ===================================== 抽象定義 ===============================================   -->
            
            <!-- +++++++++++++++ Types(獨(dú)立于機(jī)器和語(yǔ)言的類型定義) ++++++++++++++++++++ -->
            <wsdl:types>
              <xsd:schema targetNamespace="http://services.icms.********.com/abstraction/atomic/icms/splitRawCollateral/" 
                          xmlns:Q1="http://services.icms.********.com/abstraction/atomic/icms/splitRawCollateral/schema">
                <!-- ++++引入已定義的schema文件++++++ -->
                <xsd:import schemaLocation="splitRawCollateral.xsd" namespace="http://services.icms.********.com/abstraction/atomic/icms/splitRawCollateral/schema">
                </xsd:import>
                <xsd:element name="queryRawCollateralByCustomer">
                  <xsd:complexType>
                    <xsd:sequence>
           
                        <xsd:element ref="Q1:customerBO" minOccurs="0" maxOccurs="1"></xsd:element>
                    </xsd:sequence>
                  </xsd:complexType>
                </xsd:element>
                <xsd:element name="queryRawCollateralByCustomerResponse">
                  <xsd:complexType>
                    <xsd:sequence>
           
                        <xsd:element ref="Q1:customerBO" minOccurs="0" maxOccurs="unbounded"></xsd:element>
                    </xsd:sequence>
                  </xsd:complexType>
                </xsd:element>
                <xsd:element name="savaSplittedCollateral">
                    <xsd:complexType>
                        <xsd:sequence>
           
                            <xsd:element ref="Q1:rawCollateralBO"></xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="savaSplittedCollateralResponse">
                    <xsd:complexType>
                        <xsd:sequence>
           
                            <xsd:element name="result" type="xsd:string"></xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
              </xsd:schema>
            </wsdl:types>
            
            <!-- +++++++++++++++ Message(包括函數(shù)參數(shù)(輸入與輸出分開)或文檔描述) ++++++++++++++++++++ -->
            <wsdl:message name="queryRawCollateralByCustomerRequest">
              <wsdl:part name="queryRawCollateralByCustomerRequest" element="tns:queryRawCollateralByCustomer" />
            </wsdl:message>
            <wsdl:message name="queryRawCollateralByCustomerResponse">
              <wsdl:part name="queryRawCollateralByCustomerResponse" element="tns:queryRawCollateralByCustomerResponse" />
            </wsdl:message>
            <wsdl:message name="savaSplittedCollateralRequest">
                <wsdl:part name="savaSplittedCollateralRequest" element="tns:savaSplittedCollateral" />
            </wsdl:message>
            <wsdl:message name="savaSplittedCollateralResponse">
                <wsdl:part name="savaSplittedCollateralResponse" element="tns:savaSplittedCollateralResponse" />
            </wsdl:message>
            
            <!-- +++++++++++++++ PortType(引用消息部分中消息定義來(lái)描述函數(shù)簽名(操作名、輸入?yún)?shù)、輸出參數(shù))) ++++++++++++++++++++ -->
            <wsdl:portType name="splitRawCollateral">
              <wsdl:operation name="queryRawCollateralByCustomer">
                <wsdl:input message="tns:queryRawCollateralByCustomerRequest"/>
                <wsdl:output message="tns:queryRawCollateralByCustomerResponse"/>
              </wsdl:operation>
              <wsdl:operation name="savaSplittedCollateral">
                  <wsdl:input message="tns:savaSplittedCollateralRequest" />
                  <wsdl:output message="tns:savaSplittedCollateralResponse" />
              </wsdl:operation>
            </wsdl:portType>
            
            <!-- ===================================== 具體定義 ===============================================   -->
            
            <!-- +++++++++++++++ Binding(PortTypes部分的每一操作在此綁定實(shí)現(xiàn)) ++++++++++++++++++++ -->
            <wsdl:binding name="splitRawCollateralSOAP" type="tns:splitRawCollateral">
              <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
              <wsdl:operation name="queryRawCollateralByCustomer">
                <soap:operation soapAction="http://services.icms.********.com/abstraction/atomic/icms/splitRawCollateralService/queryRawCollateralByCustomer"/>
                <wsdl:input>
                  <soap:body use="literal"/>
                </wsdl:input>
                <wsdl:output>
                  <soap:body use="literal"/>
                </wsdl:output>
              </wsdl:operation>
              
              <wsdl:operation name="savaSplittedCollateral">
                <soap:operation soapAction="http://services.icms.********.com/abstraction/atomic/icms/splitRawCollateralService/savaSplittedCollateral"/>
                <wsdl:input>
                  <soap:body use="literal"/>
                </wsdl:input>
                <wsdl:output>
                  <soap:body use="literal"/>
                </wsdl:output>
              </wsdl:operation>
            </wsdl:binding>
            
            <!-- +++++++++++++++ Service(確定每一綁定的端口地址) ++++++++++++++++++++ -->
            <wsdl:service name="splitRawCollateral">
              <wsdl:port binding="tns:splitRawCollateralSOAP" name="splitRawCollateralSOAP">
                <soap:address location="http://www.example.org/"/>
              </wsdl:port>
            </wsdl:service>
            
          </wsdl:definitions>
          posted on 2008-12-15 11:27 suprasoft Inc,. 閱讀(3796) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          ©2005-2008 Suprasoft Inc., All right reserved.
          主站蜘蛛池模板: 遂溪县| 牡丹江市| 贡觉县| 和平区| 平塘县| 任丘市| 定州市| 双鸭山市| 上饶市| 唐山市| 阳朔县| 五莲县| 忻州市| 福贡县| 吉林省| 田阳县| 黄山市| 剑河县| 枣强县| 武汉市| 日喀则市| 长兴县| 来凤县| 武乡县| 黑山县| 普宁市| 和田市| 邢台市| 桂东县| 宾川县| 延川县| 八宿县| 陕西省| 靖远县| 永仁县| 邵阳市| 东辽县| 景宁| 开平市| 许昌县| 二连浩特市|