公開 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 文件的名稱空間。
名稱空間
盡管最初看上去有些古怪,但您的 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ù)型類似。tns
或 targetNamespace
表示頂級(jí) WSDL (http://www.example.com/OnlineBanking
) 中定義的所有消息。接下來將為請(qǐng)求和響應(yīng)定義元素標(biāo)記。
請(qǐng)求
本節(jié)的剩余內(nèi)容將引領(lǐng)您為 Login
和 LookupTransactions
操作創(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è)接受 accountNumber
和 token
(base64Binary
類型)的查找交易請(qǐng)求。在后文中您將看到 base64Binary
類型在 Java 編程語(yǔ)言中轉(zhuǎn)換為 byte[]
。下面定義響應(yīng)。
響應(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ù)型即可。接下來介紹消息。
消息
消息將發(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ù)定義端口類型。
端口類型
端口類型指定特定 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í)需要用到它。Login
和 LoginResponse
的 tns:
前綴指定應(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 綁定。
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)記。
服務(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)行部署。
編譯與部署 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ù)框架。
填充框架
為避免在測(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ò)誤了。
在 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ù)的初始功能。
創(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ù)。
調(diào)用 Web 服務(wù)
本節(jié)內(nèi)容也存在著重復(fù)的現(xiàn)象,因此這里只為您介紹在 Web 服務(wù)中調(diào)用 Login
和 LookupTransactions
操作的 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ī)了。
構(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ī)
服務(wù)器控制臺(tái)輸出(也就是運(yùn)行 Geronimo 的控制臺(tái))應(yīng)如 圖 2 所示。
圖 2. 服務(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)了!
posted on 2006-12-29 19:40
SIMONE 閱讀(1531)
評(píng)論(0) 編輯 收藏 所屬分類:
AXIS 、
JAVA