樂在其中

          以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,. 閱讀(3797) 評論(0)  編輯  收藏

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


          網站導航:
           
          ©2005-2008 Suprasoft Inc., All right reserved.
          主站蜘蛛池模板: 南丰县| 丰原市| 伽师县| 资源县| 临洮县| SHOW| 峨边| 博野县| 乐都县| 荔浦县| 喀喇沁旗| 青海省| 阜康市| 丹巴县| 武川县| 湟中县| 徐汇区| 陇西县| 仪征市| 三原县| 古交市| 云梦县| 台江县| 高清| 调兵山市| 商城县| 贵南县| 体育| 秦皇岛市| 鄂伦春自治旗| 中西区| 福海县| 藁城市| 治多县| 精河县| 城口县| 平阳县| 新绛县| 皋兰县| 云梦县| 滦南县|