樂在其中

          以JEE為主攻,以Flex為點綴,以Eclipse RCP為樂趣
          請訪問http://www.inframesh.org

          首頁 新隨筆 聯系 管理
            43 Posts :: 0 Stories :: 8 Comments :: 0 Trackbacks

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

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

          2. 一般建議定義單獨的xml schema, 然后在不同的wsdl中復用

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

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

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

          下面是就我寫的一個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 一般指當前namespace的縮寫(ThisNameSpace),即與targetNamespace相同
          -->
           
            <!-- ===================================== 抽象定義 ===============================================   -->
            
            <!-- +++++++++++++++ Types(獨立于機器和語言的類型定義) ++++++++++++++++++++ -->
            <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(包括函數參數(輸入與輸出分開)或文檔描述) ++++++++++++++++++++ -->
            <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(引用消息部分中消息定義來描述函數簽名(操作名、輸入參數、輸出參數)) ++++++++++++++++++++ -->
            <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部分的每一操作在此綁定實現) ++++++++++++++++++++ -->
            <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,. 閱讀(3804) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          ©2005-2008 Suprasoft Inc., All right reserved.
          主站蜘蛛池模板: 西吉县| 乐都县| 云南省| 和顺县| 桐城市| 齐齐哈尔市| 深泽县| 白河县| 隆回县| 栾城县| 东明县| 游戏| 湘乡市| 延长县| 宁海县| 金堂县| 鄂尔多斯市| 绥宁县| 西盟| 桦甸市| 砚山县| 平谷区| 盘山县| 方山县| 石家庄市| 中山市| 勃利县| 新田县| 开鲁县| 敦煌市| 京山县| 乌海市| 梧州市| 中宁县| 乐安县| 内江市| 米泉市| 二手房| 石台县| 剑河县| 山西省|