<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0

    公開 Web 服務(wù):WSDL

    在線銀行服務(wù)由幾種操作構(gòu)成,在實(shí)現(xiàn)這些操作之前,我們將首先介紹一下各操作。您將了解到各操作的細(xì)節(jié)、消息、端口類型和 WSDL 綁定。

    操作

    之前已經(jīng)看到了 在線銀行 Web 服務(wù)的概述。現(xiàn)在將了解構(gòu)建此 Web 服務(wù)所需的操作:

    Login

    • 登錄允許您通過 Web 服務(wù)驗(yàn)證您的憑證,并獲取一個(gè)令牌(token),證明您已通過驗(yàn)證,可進(jìn)一步進(jìn)行 Web 服務(wù)請(qǐng)求。
    • 傳遞兩段數(shù)據(jù)(用戶名和密碼),返回一段數(shù)據(jù)(二進(jìn)制令牌)。

    Logout

    • 注銷操作將從 Web 服務(wù)的經(jīng)過身份驗(yàn)證的令牌/用戶名列表中刪除您的令牌和用戶名。
    • 注銷僅需您發(fā)送令牌,隨后會(huì)返回一個(gè)確定布爾變量作為響應(yīng)。

    LookupAccounts

    • 查找您的賬戶信息。
    • 僅需令牌,返回賬戶號(hào)、類型和余額列表。

    LookupTransactions

    • 按日期查找交易。
    • 發(fā)送令牌和賬戶號(hào),以及可選日期范圍(日期 1 和日期 2),回發(fā)一個(gè)交易復(fù)型數(shù)組作為響應(yīng)(minOccurs="0" maxOccurs="unbounded")。

    SearchTransactions

    • 按支票號(hào)或金額查找交易。
    • 允許更為復(fù)雜的交易搜索:傳遞賬戶號(hào)、令牌,以及支票號(hào)范圍或金額范圍,隨后會(huì)返回一個(gè)滿足條件的交易復(fù)型數(shù)組作為響應(yīng)。

    TransferFunds

    • 將資金從一個(gè)賬戶劃撥到另外一個(gè)賬戶中。
    • 劃撥資金操作要求您發(fā)送令牌、源賬戶、目標(biāo)賬戶號(hào)和金額。回發(fā)一個(gè)確認(rèn)布爾變量作為響應(yīng)。

    LookupPayees

    • 查看與您的在線賬戶相關(guān)的收款方。
    • 發(fā)送令牌,您將接收一個(gè)作為響應(yīng)的收款方別名數(shù)組。

    AddPayee

    • 向您的在線賬戶添加收款方。
    • 發(fā)送令牌和收款方復(fù)型,然后發(fā)送一個(gè)布爾確認(rèn)信息作為響應(yīng)。

    EditPayee

    • AddPayee 基本完全相同,惟一的差異就是更新收款方而非將其插入基礎(chǔ)數(shù)據(jù)庫(kù)。

    ViewPayee

    • 查看您的賬戶中與一個(gè)收款方相關(guān)的所有信息。
    • 發(fā)送令牌和收款方別名,檢索收款方復(fù)型作為響應(yīng)。

    MakeBillPayment

    • 支付與一個(gè)收款方相關(guān)的一份賬單。
    • 發(fā)送 BillPayment 復(fù)型和令牌,回發(fā)一個(gè)確認(rèn)布爾變量作為響應(yīng)。

    ChangeBillPayment

    • 更改事先安排好的支付。
    • MakeBillPayment 基本相同,惟一的差異就是更新支付而非將其插入基本數(shù)據(jù)庫(kù)。

    LookupPendingPayments

    • 查看所有待定支付。
    • 僅發(fā)送令牌,您將接收一個(gè) BillPayment 復(fù)型數(shù)組作為響應(yīng)。

    SubmitLoanApplication

    • 提交一份貸款申請(qǐng)表。
    • 發(fā)送 LoanApplication 復(fù)型和令牌,回發(fā)一個(gè)確認(rèn)布爾變量作為響應(yīng)。

    ViewLoanApplicationStatus

    • 查看與您的在線賬戶相關(guān)的所有貸款狀態(tài)。
    • 僅發(fā)送令牌,您將接收一個(gè) LoanApplicationStatus 復(fù)型數(shù)組。

    上邊給出了全部定義。切記,有極多的操作要定義,并且不能過于繁冗或令人感到厭煩。因此,如果您遇到麻煩,可參考本教程后文 下載 一節(jié)中給出的 WSDL 文件,將其與上述操作比較。但下面我們會(huì)從始至終地詳細(xì)介紹部分操作,作為示例供您參考,您可通過這些示例掌握如何處理其他操作。

    接下來將定義 WSDL 文件的名稱空間。





    回頁(yè)首


    名稱空間

    盡管最初看上去有些古怪,但您的 WSDL 文件的名稱空間相當(dāng)重要,因?yàn)樗鼈兌x了整個(gè) WSDL 中各標(biāo)記(tag)的上下文。將以下代碼放在已添加到 OnlineBanking.wsdl 文件中的數(shù)據(jù)結(jié)構(gòu)之前,如 清單 7 所示。



    清單 7. 設(shè)置 WSDL
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions
       name="OnlineBanking"
       targetNamespace=http://www.example.com/OnlineBanking
       xmlns="http://schemas.xmlsoap.org/wsdl/"
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
       xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
       xmlns:tns="http://www.example.com/OnlineBanking"
       xmlns:xsd1="http://www.example.com/OnlineBanking/xsd"
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    
      <!-- Types -->
      <wsdl:types>
        <xsd:schema
           targetNamespace="http://www.example.com/OnlineBanking/xsd"
           xmlns="http://www.w3.org/2001/XMLSchema"
           xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
           elementFormDefault="qualified">
    

    xsd1: 名稱空間指定 <xsd:schema 標(biāo)記中定義的所有結(jié)構(gòu)都屬于 xsd1: 名稱空間 (http://www.example.com/OnlineBanking/xsd),且需要據(jù)其引用,與 清單 6 中所引用的 RecurringBillPayment 復(fù)型類似。tnstargetNamespace 表示頂級(jí) WSDL (http://www.example.com/OnlineBanking) 中定義的所有消息。接下來將為請(qǐng)求和響應(yīng)定義元素標(biāo)記。





    回頁(yè)首


    請(qǐng)求

    本節(jié)的剩余內(nèi)容將引領(lǐng)您為 LoginLookupTransactions 操作創(chuàng)建 WSDL。請(qǐng)求為發(fā)送至 Web 服務(wù)的 SOAP 對(duì)象,可包含不同的內(nèi)部層次結(jié)構(gòu),如前文中創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)。在 RecurringBillPayment 復(fù)型之后定義登錄請(qǐng)求,如 清單 8 所示。



    清單 8. 登錄請(qǐng)求
          <xsd:element name="Login">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element minOccurs="1" maxOccurs="1"
                             name="username" type="xsd:string" />
                <xsd:element minOccurs="1" maxOccurs="1"
                             name="password" type="xsd: string" />
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
    

    本元素中恰好發(fā)送了一個(gè)用戶名和密碼。就是這樣。接著定義查找交易元素,如 清單 9 所示。



    清單 9. 查找交易請(qǐng)求
          <xsd:element name="LookupTransactions">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element minOccurs="1" maxOccurs="1"
                             name="accountNumber" type="xsd:int" />
                <xsd:element minOccurs="0" maxOccurs="1"
                             name="date1" type="xsd:date" />
                <xsd:element minOccurs="0" maxOccurs="1"
                             name="date2" type="xsd:date" />
                <xsd:element minOccurs="1" maxOccurs="1"
                             name="token" type="xsd:base64Binary" />
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
    

    這里有一個(gè)接受 accountNumbertokenbase64Binary 類型)的查找交易請(qǐng)求。在后文中您將看到 base64Binary 類型在 Java 編程語(yǔ)言中轉(zhuǎn)換為 byte[]。下面定義響應(yīng)。





    回頁(yè)首


    響應(yīng)

    客戶機(jī)創(chuàng)建并發(fā)送請(qǐng)求。Web 服務(wù)接收請(qǐng)求并根據(jù)請(qǐng)求創(chuàng)建響應(yīng)。定義登錄響應(yīng),如 清單 10 所示。



    清單 10. 登錄響應(yīng)
          <xsd:element name="LoginResponse">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element minOccurs="1" maxOccurs="1"
                             name="valid" type="xsd:boolean" />
                <xsd:element minOccurs="1" maxOccurs="1"
                             name="token" type="xsd:base64Binary" />
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
    

    登錄成功響應(yīng)給出有效變量的 true 值及令牌變量中的二進(jìn)制令牌。再看看查找交易響應(yīng)。按 清單 11 定義該響應(yīng)。



    清單 11. 查找交易響應(yīng)
          <xsd:element name="LookupTransactionsResponse">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element minOccurs="0" maxOccurs="unbounded"
                             name="transactions" type="xsd1:Transaction" />
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
    

    該響應(yīng)返回一個(gè)交易元素?cái)?shù)組。注意此處使用的 xsd1: 名稱空間。您只需直接為數(shù)組類型引用 清單 1 中定義的 Transaction 復(fù)型即可。接下來介紹消息。





    回頁(yè)首


    消息

    消息將發(fā)送給 Web 服務(wù)并返回,這些消息包括 SOAP 請(qǐng)求之前您在 響應(yīng) 一節(jié)中定義的響應(yīng)。定義 Login 請(qǐng)求和響應(yīng)消息,如 清單 12 所示。



    清單 12. 登錄請(qǐng)求和響應(yīng)消息
      <!-- Messages -->
      <wsdl:message name="Login">
        <wsdl:part name="parameters" element="xsd1:Login" />
      </wsdl:message>
      <wsdl:message name="LoginResponse">
        <wsdl:part name="parameters" element="xsd1:LoginResponse" />
      </wsdl:message>
    

    在消息內(nèi)放置哪些內(nèi)容作為 <wsdl:part 標(biāo)記的名稱屬性無關(guān)緊要,要注意的項(xiàng)目已用黑體表示。登錄請(qǐng)求消息引用之前定義的 Login 元素,同樣,LoginResponse 響應(yīng)消息引用之前定義的 LoginResponse 元素。下面定義查找交易請(qǐng)求與響應(yīng)消息,如 清單 13 所示。



    清單 13. 查找交易請(qǐng)求與響應(yīng)消息
      <wsdl:message name="LookupTransactions">
        <wsdl:part name="parameters" element="xsd1:LookupTransactions" />
      </wsdl:message>
      <wsdl:message name="LookupTransactionsResponse">
        <wsdl:part name="parameters" 
                   element="xsd1:LookupTransactionsResponse" />
      </wsdl:message>
    

    現(xiàn)在您應(yīng)注意到了繁冗重復(fù)。就像登錄請(qǐng)求與響應(yīng)那樣,您要命名查找交易請(qǐng)求和響應(yīng),引用之前定義的相關(guān)查找交易請(qǐng)求和響應(yīng)元素。其他請(qǐng)求與響應(yīng)也遵循同一模板。下面為您的在線銀行 Web 服務(wù)定義端口類型。





    回頁(yè)首


    端口類型

    端口類型指定特定 Web 服務(wù)的操作。我們將定義端口類型和兩個(gè)登錄與查找交易操作。按 清單 14 定義端口類型和登錄操作。



    清單 14. 端口類型和登錄操作
      <!-- Port type -->
      <wsdl:portType name="OnlineBankingPortType">
    
        <wsdl:operation name="Login">
          <wsdl: input message="tns:Login" />
          <wsdl: output message="tns:LoginResponse" />
        </wsdl:operation>
    

    首先命名端口類型,在指定 WSDL 綁定時(shí)需要用到它。LoginLoginResponsetns: 前綴指定應(yīng)在 tns 名稱空間中查找消息,參見 清單 15 中的定義。現(xiàn)在定義查找交易操作。



    清單 15. 查找交易操作
        <wsdl:operation name="LookupTransactions">
          <wsdl: input message="tns:LookupTransactions" />
          <wsdl: output message="tns:LookupTransactionsResponse" />
        </wsdl:operation>
    

    再一次地,就像 Login 操作那樣,定義 LookupTransactions 操作與之非常類似。接下來介紹 WSDL 綁定。





    回頁(yè)首


    WSDL 綁定

    WSDL 綁定指定消息格式、Web 服務(wù)的協(xié)議類型、在該端口上公開的操作。定義 WSDL 綁定和登錄操作特有的綁定,如 清單 16 所示。



    清單 16. WSDL 登錄操作綁定
      <!-- Binding -->
      <wsdl:binding name="OnlineBankingPortBinding"
                    type="tns:OnlineBankingPortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
                      style="document" />
    
        <wsdl:operation name="Login">
          <soap:operation
                soapAction="http://www.example.com/OnlineBanking/Login"
                style="document" />
          <wsdl:input>
            <soap:body use="literal" />
          </wsdl:input>
          <wsdl:output>
            <soap:body use="literal" />
          </wsdl:output>
        </wsdl:operation>
    

    首先,命名綁定。現(xiàn)在注意類型。它引用了您在 清單 14 中定義的端口類型。<soap:binding 標(biāo)記指定 Web 服務(wù)的傳輸方法和方式,分別為 http 和文檔。<soap:body 指定輸入和輸出消息的編碼方式。這里采用文字編碼。接著定義查找交易操作的 WSDL 綁定,如 清單 17 所示。



    清單 17. 查找交易操作的 WSDL 綁定
        <wsdl:operation name="LookupTransactions">
          <soap:operation
       soapAction="http://www.example.com/OnlineBanking/LookupTransactions"
       style="document" />
          <wsdl:input>
            <soap:body use="literal" />
          </wsdl:input>
          <wsdl:output>
            <soap:body use="literal" />
          </wsdl:output>
        </wsdl:operation>
    

    這又一次與登錄操作具有相似之處。其他操作也遵循這一模板。接下來繼續(xù)介紹 WSDL 的最后一部分內(nèi)容:服務(wù)標(biāo)記。





    回頁(yè)首


    服務(wù)標(biāo)記

    服務(wù)標(biāo)記定義此 Web 服務(wù)公開了哪些端口。按 清單 18 進(jìn)行服務(wù)定義。



    清單 18. 服務(wù)定義
      <!-- Service -->
      <wsdl:service name="OnlineBankingService">
    
        <wsdl:port name="OnlineBankingPort"
                   binding="tns:OnlineBankingPortBinding">
          <soap:address
    location="http://localhost:8080/axis2/services/OnlineBankingService" />
        </wsdl:port>
    
      </wsdl:service>
    

    首先命名服務(wù),隨后定義一個(gè)公開的端口 OnlineBankingPort,該端口引用您在 清單 17 中所定義的 WSDL 綁定。地址用于指定 Geronimo 上查找 Web 服務(wù)的 URL,也是收發(fā) SOAP 請(qǐng)求的 URL。

    下一節(jié)將 WSDL 編譯為 Java 代碼并在 Geronimo 上進(jìn)行部署。





    回頁(yè)首

    編譯與部署 Web 服務(wù)

    現(xiàn)在開始創(chuàng)建 Java 代碼,它將實(shí)現(xiàn)在 WSDL 中定義的 Web 服務(wù)并使用 Axis2 在 Geronimo 上進(jìn)行部署。

    WSDL2Java

    為創(chuàng)建 Web 服務(wù)的 Java 實(shí)現(xiàn),請(qǐng)?jiān)谀?WSDL 文件上運(yùn)行 WSDL2Java 工具。為此,鍵入以下代碼(在 Microsoft? Windows? 中):

    <axis2-binary-install-dir>/bin/WSDL2Java -d xmlbeans -uri ask.wsdl
    -p com.ibm.axis2.onlinebanking -ss -sd


    或(在 Linux? 中):

    sh <axis2-binary-install-dir>/bin/WSDL2Java.sh -d xmlbeans
    -uri ask.wsdl -p com.ibm.axis2.onlinebanking -sd


    現(xiàn)在鍵入以下代碼以創(chuàng)建用于測(cè)試的客戶機(jī)存根(在 Windows 中):

    <axis2-binary-install-dir>/bin/WSDL2Java -d xmlbeans -uri ask.wsdl
    -p com.ibm.axis2.onlinebanking -ss -sd


    或(在 Linux 中):

    sh <axis2-binary-install-dir>/bin/WSDL2Java.sh -d xmlbeans
    -uri ask.wsdl -p com.ibm.axis2.onlinebanking -sd


    就是這樣!現(xiàn)在 ./src 目錄下應(yīng)已創(chuàng)建好了 Java 源文件。方便的 Apache Ant build.xml 文件也會(huì)創(chuàng)建在此目錄中。現(xiàn)在填充基本 Web 服務(wù)框架。





    回頁(yè)首


    填充框架

    為避免在測(cè)試 Web 服務(wù)時(shí)出現(xiàn)嚴(yán)重錯(cuò)誤,需要在填充 Web 服務(wù)框架時(shí)使其永遠(yuǎn)不會(huì)返回 null。查看 ./src/com/ibm/axis2/onlinebanking/OnlineBankingPortTypeSkeleton.java 這一 Web 服務(wù)框架。打開并仔細(xì)觀察該框架。您應(yīng)注意到其中某處的 Login 方法,如 清單 19 所示。



    清單 19. 原始 Web 服務(wù)
            public  com.example.www.onlinebanking.xsd.LoginResponseDocument Login
                      (com.example.www.onlinebanking.xsd.
                       LoginDocument param8 ){
                    //Todo fill this with the necessary business logic
                    return null;
            }
    

    注意返回類型為 LoginResponseDocument,方法的參數(shù)為 LoginDocument(請(qǐng)求)。通過返回一個(gè)空的 LoginResponseDocument 填充示例定義,如 清單 20 所示。



    清單 20. 示例定義
        public com.example.www.onlinebanking.xsd.
               LoginResponseDocument Login
            (com.example.www.onlinebanking.xsd.LoginDocument param8 ){
            LoginDocument.
                Login req =
                param8.getLogin();
    
            LoginResponseDocument res =
                LoginResponseDocument.Factory.newInstance();
            LoginResponseDocument.
                LoginResponse res2 =
                res.addNewLoginResponse();
    
            return res;
        }
    

    在第一行中,從 param8 中獲得實(shí)際 Login 請(qǐng)求對(duì)象(Axis2 在您的系統(tǒng)中生成的名稱可能與此不同)。接下來在第三行中創(chuàng)建一個(gè)新的 LoginResponseDocument,添加新的 LoginResponse,返回空 res 對(duì)象 —— LoginResponseDocument

    另外,不要忘記在頂端的包聲明之下輸入以下 import 語(yǔ)句:

    package com.ibm.axis2.onlinebanking;
    import com.example.www.onlinebanking.xsd.*;
    ...


    這樣在構(gòu)建和部署 Web 服務(wù)時(shí)就不會(huì)遇到 class not found 錯(cuò)誤了。





    回頁(yè)首


    在 Geronimo 上部署 Axis2 和 Web 服務(wù)

    首先,您需要構(gòu)建 Web 服務(wù)。進(jìn)入運(yùn)行 WSDL2Java 工具的目錄下,鍵入:

    ant jar.server

    這將創(chuàng)建一個(gè) OnlineBankingService.aar 文件,路徑為 ./build/lib/OnlineBankingService.aar。啟動(dòng) Geronimo,部署此 Web 服務(wù) Axis2 歸檔文件。鍵入以下命令引導(dǎo) Apache Geronimo:

    java -jar <geronimo-install-dir>/bin/server.jar

    您已通過將 axis2.war 文件復(fù)制到 <geronimo-install-dir>/deploy 中而從 Apache 處下載了此文件,下面來部署此文件。打開瀏覽器,轉(zhuǎn)到 http://localhost:8080/axis2/Login.jsp。

    以用戶名 admin、密碼 axis2 登錄。將您的瀏覽器轉(zhuǎn)到 http://localhost:8080/axis2/upload.jsp。

    單擊 Browse,找到 OnlineBankingService.aar 文件,然后單擊 Upload。在 20 到 30 秒內(nèi)即可準(zhǔn)備好 Web 服務(wù)。同時(shí),下一節(jié)將為您介紹如何創(chuàng)建一個(gè)簡(jiǎn)單的客戶機(jī),以測(cè)試 Web 服務(wù)的初始功能。





    回頁(yè)首


    創(chuàng)建和測(cè)試簡(jiǎn)單的客戶機(jī)

    為測(cè)試您的 Web 服務(wù),應(yīng)定義一個(gè)簡(jiǎn)單的客戶機(jī)對(duì)其進(jìn)行徹底的測(cè)試,確保正確傳輸 SOAP 消息。

    導(dǎo)入類依賴性

    創(chuàng)建客戶機(jī)的第一步是導(dǎo)入類依賴性。創(chuàng)建 Client.java 文件,路徑為 ./src/Client.java。按 清單 21 定義此文件。



















    清單 21. 導(dǎo)入類依賴性
    import com.example.www.onlinebanking.xsd.*;
    import com.ibm.axis2.onlinebanking.*;
    
    import java.util.*;
    
    public class Client{
    
        public static void main(java.lang.String args[]){
    

    您將使用的絕大多數(shù)對(duì)象都在前兩個(gè)導(dǎo)入語(yǔ)句中,特別是客戶機(jī)存根,還有請(qǐng)求與響應(yīng)對(duì)象,以及 數(shù)據(jù)結(jié)構(gòu) 一節(jié)中所定義的其他數(shù)據(jù)結(jié)構(gòu)。下面開始定義主函數(shù),首先聲明客戶機(jī)存根。

    創(chuàng)建客戶機(jī)存根

    客戶機(jī)存根使您可處理現(xiàn)運(yùn)行于 Geronimo 之上的 Web 服務(wù)。按 清單 22 創(chuàng)建客戶機(jī)存根。



    清單 22. 客戶機(jī)存根
        public static void main(java.lang.String args[]){
            OnlineBankingPortTypeStub stub = null;
            try{
                stub = new OnlineBankingPortTypeStub(null,
          "http://localhost:8080/axis2/services/OnlineBankingService");
    ...
            } catch(Exception e){
                e.printStackTrace();
            }
        }
    

    將 Web 服務(wù)的 URL 傳遞給 OnlineBankingPortTypeStub 對(duì)象即可輕松完成對(duì)象的初始化。下面創(chuàng)建一些在調(diào)用和測(cè)試 Web 服務(wù)時(shí)使用的初始函數(shù)。





    回頁(yè)首


    調(diào)用 Web 服務(wù)

    本節(jié)內(nèi)容也存在著重復(fù)的現(xiàn)象,因此這里只為您介紹在 Web 服務(wù)中調(diào)用 LoginLookupTransactions 操作的 API。掌握這種模板和 清單 25 中定義的函數(shù)調(diào)用后,即可輕松處理其余部分。首先定義調(diào)用 Login 操作的方法,如 清單 23 所示。



    清單 23. 調(diào)用 Login 操作
        /* LOGIN */
        public static byte[] login(OnlineBankingPortTypeStub stub,
                                   String username, String password){
            try{
                LoginDocument reqDoc00 = LoginDocument.
                    Factory.newInstance();
                LoginDocument.Login reqDoc01 = reqDoc00.addNewLogin();
    
                LoginResponseDocument resDoc00 = stub.Login(reqDoc00);
                LoginResponseDocument.LoginResponse resDoc01 =
                    resDoc00.getLoginResponse();
    
                return null;
            } catch(Exception e){
                e.printStackTrace();
            }
            System.out.println("Authorization failed");
            return null;
        }
    

    在這里,我們輕松地創(chuàng)建了一個(gè)空的 LoginDocument 請(qǐng)求、將其發(fā)送給 Web 服務(wù),然后接收一個(gè)空對(duì)象。如果一切順利,則不會(huì)出現(xiàn)任何錯(cuò)誤。清單 24 顯示了定義 LookupTransactions 操作的原理示例。



    清單 24. 調(diào)用 LookupTransactions 操作
                        
        /* LOOKUPTRANSACTIONS */
        public static boolean lookupTransactions(OnlineBankingPortTypeStub
                                                 stub){
            try{
                LookupTransactionsDocument reqDoc00 =
                    LookupTransactionsDocument.Factory.newInstance();
                LookupTransactionsDocument.
                    LookupTransactions reqDoc01 =
                    reqDoc00.addNewLookupTransactions();
    
                LookupTransactionsResponseDocument resDoc00 =
                    stub.LookupTransactions(reqDoc00);
                LookupTransactionsResponseDocument.
                    LookupTransactionsResponse resDoc01 =
                    resDoc00.getLookupTransactionsResponse();
    
                return true;
            } catch(Exception e){
                e.printStackTrace();
            }
            return false;
        }
    

    為其他所有操作創(chuàng)建類似的模板,這樣您就可以對(duì)它們進(jìn)行測(cè)試,為順利學(xué)習(xí)本系列教程的第 2 部分作好準(zhǔn)備。接下來一次性測(cè)試所有 Web 服務(wù)操作,調(diào)用方法(參見 清單 25)。



    清單 25. 一次性測(cè)試所有 Web 服務(wù)操作
                        
    ...
                login(stub);
                lookupAccounts(stub);
                lookupTransactions(stub);
                searchTransactions(stub);
                viewPayee(stub);
                makeBillPayment(stub);
                changeBillPayment(stub);
                lookupPendingPayments(stub);
                addPayee(stub);
                lookupPayees(stub);
                editPayee(stub);
                transferFunds(stub);
                submitLoanApplication(stub);
                viewLoanApplicationStatus(stub);
                logout(stub);
            } catch(Exception e){
                e.printStackTrace();
            }
        }
    

    調(diào)用各方法,傳入存根,這樣就作好了準(zhǔn)備,可以構(gòu)建并運(yùn)行客戶機(jī)了。





    回頁(yè)首


    構(gòu)建客戶機(jī),測(cè)試 Web 服務(wù)

    您應(yīng)該希望再次構(gòu)建 Web 服務(wù)。像之前一樣,鍵入以下命令來構(gòu)建它:

    ant jar.server

    要運(yùn)行客戶機(jī),向 build.xml 文件中添加一個(gè)新的 Ant 任務(wù),如 清單 26 所示。



    清單 26. 添加新 Ant 任務(wù)以運(yùn)行客戶機(jī)
                        
    <!-- new target for running the client -->
        <target depends="jar.server" name="run.client">
            <java classname="Client" fork="true">
                <classpath>
                    <path refid="axis2.class.path"/>
                    <path location="${lib}/${name}.aar"/>
                    <path location="${lib}/${xbeans.packaged.jar.name}"/>
                </classpath>
            </java>
        </target>
    

    這樣就創(chuàng)建好了一個(gè)運(yùn)行客戶機(jī)的新任務(wù),鍵入以下命令即可運(yùn)行客戶機(jī):

    ant run.client

    您應(yīng)看到運(yùn)行客戶機(jī)的控制臺(tái)輸出,如 圖 1 所示。



    圖 1. 運(yùn)行客戶機(jī)
    運(yùn)行客戶機(jī)

    服務(wù)器控制臺(tái)輸出(也就是運(yùn)行 Geronimo 的控制臺(tái))應(yīng)如 圖 2 所示。



    圖 2. 服務(wù)器輸出
    服務(wù)器輸出

    此時(shí),您或許會(huì)注意到,首次運(yùn)行客戶機(jī)要花費(fèi)很長(zhǎng)時(shí)間,這是因?yàn)?Web 服務(wù)需要在您的機(jī)器上加載并緩存自己。此后再運(yùn)行客戶機(jī)會(huì)快很多,您會(huì)注意到明顯的速度提高。

    至此,一切都很好!Web 服務(wù)正常運(yùn)轉(zhuǎn)了!





    回頁(yè)首


    posted on 2006-12-29 19:40 SIMONE 閱讀(1531) 評(píng)論(0)  編輯  收藏 所屬分類: AXISJAVA
    主站蜘蛛池模板: 免费v片视频在线观看视频| 三上悠亚在线观看免费| 妞干网手机免费视频| 亚洲字幕在线观看| 免费视频爱爱太爽了| 亚洲成人福利在线观看| 精品国产无限资源免费观看| 亚洲乱码一二三四五六区| 成人免费视频网站www| 亚洲人成人网毛片在线播放| 免费被黄网站在观看| 相泽南亚洲一区二区在线播放| 免费乱理伦在线播放| 亚欧国产一级在线免费| 亚洲国产另类久久久精品| 久久九九AV免费精品| 亚洲一级片在线播放| 日韩免费一区二区三区| 男女污污污超污视频免费在线看| 中文字幕第13亚洲另类| 无码国产精品一区二区免费vr| 亚洲高清中文字幕| 女人被男人躁的女爽免费视频| 成人亚洲国产精品久久| 国产亚洲精品精华液| 亚洲啪啪免费视频| 蜜芽亚洲av无码一区二区三区| 亚洲精品偷拍视频免费观看 | 国产亚洲精品岁国产微拍精品| 久久久久久成人毛片免费看| 激情亚洲一区国产精品| 亚洲Av无码国产情品久久 | 国产成人 亚洲欧洲| 亚洲一区二区三区无码中文字幕| 精品无码人妻一区二区免费蜜桃| 亚洲日韩国产精品乱-久| 亚洲中文字幕无码爆乳av中文| 中文字幕成人免费视频| 国产亚洲情侣久久精品| 亚洲专区在线视频| 免费一级e一片在线播放|