String fromAccount
String toAccount
double amount
String currency
下面是代碼:
在上面的代碼中你看到奇怪的代碼了嗎? 大概沒有吧. 除了那個(gè)公共的默認(rèn)構(gòu)造函數(shù).這個(gè)構(gòu)造函數(shù)是必不可少的,因?yàn)閄Fire要用他來實(shí)例這個(gè)類.
因?yàn)槭褂媒涌趤硗瓿墒呛芎玫膶?shí)踐,因此我們的類也實(shí)現(xiàn)了一個(gè)名叫IBankingService的接口.代碼很簡單:
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>Banking</name>
<namespace>mybank</namespace>
<serviceClass>com.mybank.xfire.example.IBankingService</serviceClass>
<implementationClass>com.mybank.xfire.example.BankingService</implementationClass>
</service>
</beans>
<implementationClass>元素記錄實(shí)現(xiàn)接口的Java類名.這是一個(gè)可選元素.如果前一個(gè)元素<serviceClass>填入的是接口,那么此處就要填入相應(yīng)的實(shí)現(xiàn)類名.
至此,我們的Web服務(wù)配置工作就完成了.
XFire和其他庫
現(xiàn)在,我們做最后一步工作--獲得所有必要的庫文件.我們?cè)趺传@得他們呢? 訪問XFire官方網(wǎng)站http://xfire.codehaus.org/ 下載xfire-distribution-1.0.zip并解壓到本地文件夾中.將下列文件拷貝到WEB-INF\lib:
activation-1.0.2.jar commons-codec-1.3.jar commons-httpclient-3.0.jar commons-logging-1.0.4.jar jaxen-1.1-beta-8.jar jdom-1.0.jar log4j-1.2.x.jar mail-1.3.3_01.jar spring-1.2.x.jar stax-api-1.0.jar wsdl4j-1.5.2.jar wstx-asl-2.9.jar xbean-2.1.0.jar xbean-spring-2.2.jar xfire-all-1.0.jar XmlSchema-1.0.jar 大功告成!讓我們部署并啟動(dòng)應(yīng)用.要部署這個(gè)例子,只需要將websvc.war復(fù)制到Apache Tomcat 環(huán)境的webapps目錄下,等待幾分鐘,應(yīng)用會(huì)自動(dòng)啟動(dòng). 例子的所有源代碼也包含在這個(gè)war文件中(文件太大,我將其分卷壓縮)part1 part2 part3 part4 part5.現(xiàn)在,我們的應(yīng)用已經(jīng)是一個(gè)Web服務(wù)了.
我們?cè)趺粗繵eb服務(wù)有效?
我們來做一些測(cè)試,看看Web服務(wù)是否有效.
首先,我們先來看看WSDL是否有效。在瀏覽器中輸入U(xiǎn)RL。哪個(gè)URL?因?yàn)槲覀兊膚ar文件名叫websvc.war,services.xml 中給出的servicenames是Banking, 那么WSDL URL為http://localhost:8080/websvc/services/Banking?wsdl。
請(qǐng)注意:URL的前一部分,例如:http://localhost:8080會(huì)根據(jù)你安裝的應(yīng)用服務(wù)不同而不同。如果你輸入了URL,你將會(huì)看到以<wsdl:definitions>為根結(jié)點(diǎn)的xml文件。這個(gè)文件叫做web服務(wù)的WSDL.如果你看到了這個(gè)文件,那么初步驗(yàn)證你的Web服務(wù)有效。
但是這個(gè)驗(yàn)證還不夠。有時(shí)候情況會(huì)復(fù)雜一些,你可以看到WSDL,但是客戶端卻無法訪問Web服務(wù)。因此要真正檢驗(yàn)Web服務(wù)是否真的好使,就要用客戶端程序?qū)eb服務(wù)作一次真正的調(diào)用。
摘要:在《XFire:開發(fā)Web服務(wù)的簡易之道(二)》中最后提到過:要想檢驗(yàn)Web服務(wù)是否有效,需要一個(gè)客戶端程序?qū)嶋H調(diào)用一下這個(gè)Web服務(wù)。本章我們就來創(chuàng)建這樣一個(gè)用于檢驗(yàn)的客戶端程序,驗(yàn)證一下我們前面的工作是不是真的有效。最后總結(jié)一下用XFire開發(fā)Web服務(wù)的步驟。
創(chuàng)建客戶端程序
我們可以使用很多方法,任何SOAP工具來創(chuàng)建客戶端程序,例如.Net或Apache Axis。我的這個(gè)例子中我是用一個(gè)名叫WsClient.java的Servlet中的動(dòng)態(tài)代理。為了減少編碼的代價(jià),我將所有屏幕構(gòu)建元素都放到doGet()方法中。對(duì)Web服務(wù)服務(wù)的實(shí)際調(diào)用在callWebService()方法中。代碼很簡單:

/**//* Call the Web service
*
*/
public String callWebService(
String fromAccount, String toAccount, double amount, String currency)

throws MalformedURLException, Exception
{
//Create a metadata of the service
Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);
log.debug("callSoapServiceLocal(): got service model." );
//Create a proxy for the deployed service
XFire xfire = XFireFactory.newInstance().getXFire();
XFireProxyFactory factory = new XFireProxyFactory(xfire);
String serviceUrl = "http://localhost:8080/websvc/services/Banking";
IBankingService client = null;

try
{
client = (IBankingService) factory.create(serviceModel, serviceUrl);

} catch (MalformedURLException e)
{
log.error("WsClient.callWebService(): EXCEPTION: " + e.toString());
}
//Invoke the service
String serviceResponse = "";

try
{
serviceResponse = client.transferFunds(fromAccount, toAccount, amount, currency);

} catch (Exception e)
{
log.error("WsClient.callWebService(): EXCEPTION: " + e.toString());
serviceResponse = e.toString();
}
log.debug("WsClient.callWebService(): status=" + serviceResponse);

//Return the response
return serviceResponse;
}
這段代碼做了些什么?讓我解釋一下:首先我們創(chuàng)建了一個(gè)服務(wù)模型,里面包含了對(duì)服務(wù)的描述,換句話說,我們創(chuàng)建了服務(wù)的元數(shù)據(jù)。我們是用XFire的ObjectServiceFactory通過接口IBankingService.class創(chuàng)建了這個(gè)服務(wù)模型。
下一步就是獲取XFire的代理對(duì)象。這一步中沒有任何應(yīng)用細(xì)節(jié)。通過proxyFactory,使用服務(wù)模型和服務(wù)終點(diǎn)URL(用于獲得WSDL),我們獲得了服務(wù)的本地代理。
這個(gè)代理就是實(shí)際的客戶端?,F(xiàn)在我們可以調(diào)用transferFunds()方法獲得我們想要的Web服務(wù)了。
一旦這個(gè)例子部署成功并啟動(dòng),就可以用下面的Servlet URL檢驗(yàn):
http://localhost:8080/websvc/ws
Servlet使用默認(rèn)的參數(shù)訪問Web服務(wù)并顯示接收到的響應(yīng)。你應(yīng)該能看到下面兩行信息
Response Received
COMPLETED: CDN$ 500.00 was successfully transferred from A/C# 11111-01234 to A/C# 99999-05678
現(xiàn)在你可以確信Web服務(wù)真的起來了并且工作正常。
你可以嘗試傳入不同的數(shù)據(jù)。你可以輸入類似于下面的URL
http://localhost:8080/websvc/ws?from=11-2345&to=77-9876&amt=250.00&cur=EUR.
Web服務(wù)開發(fā)的基本步驟
下面列出了使用XFire開發(fā)Web服務(wù)的基本步驟:
1、檢驗(yàn)Java類的方法和構(gòu)造函數(shù)時(shí)公共的;
2、將XFire Servlet相關(guān)的入口添加到web.xml中;
3、創(chuàng)建services.xml并把它放到WEB-INF/classes/META-INF/xfire目錄下;
4、將Xfire和其他第三方庫添加到你的Web應(yīng)用的WEB-INF/lib 目錄下。
OK,這就是全部要做,就是這么簡單。
聯(lián)系客服