
String fromAccount String toAccount double amount String currency 下面是代碼:













































在上面的代碼中你看到奇怪的代碼了嗎? 大概沒(méi)有吧. 除了那個(gè)公共的默認構造函數.這個(gè)構造函數是必不可少的,因為XFire要用他來(lái)實(shí)例這個(gè)類(lèi).
因為使用接口來(lái)完成是很好的實(shí)踐,因此我們的類(lèi)也實(shí)現了一個(gè)名叫IBankingService的接口.代碼很簡(jiǎn)單:











<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í)現接口的Java類(lèi)名.這是一個(gè)可選元素.如果前一個(gè)元素<serviceClass>填入的是接口,那么此處就要填入相應的實(shí)現類(lèi)名.
至此,我們的Web服務(wù)配置工作就完成了.
XFire和其他庫
現在,我們做最后一步工作--獲得所有必要的庫文件.我們怎么獲得他們呢? 訪(fǎng)問(wèn)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)應用.要部署這個(gè)例子,只需要將websvc.war復制到Apache Tomcat 環(huán)境的webapps目錄下,等待幾分鐘,應用會(huì )自動(dòng)啟動(dòng). 例子的所有源代碼也包含在這個(gè)war文件中(文件太大,我將其分卷壓縮)part1 part2 part3 part4 part5.現在,我們的應用已經(jīng)是一個(gè)Web服務(wù)了.
我們怎么知道Web服務(wù)有效?
我們來(lái)做一些測試,看看Web服務(wù)是否有效.
首先,我們先來(lái)看看WSDL是否有效。在瀏覽器中輸入URL。哪個(gè)URL?因為我們的war文件名叫websvc.war,services.xml 中給出的servicenames是Banking, 那么WSDL URL為http://localhost:8080/websvc/services/Banking?wsdl。
請注意:URL的前一部分,例如:http://localhost:8080會(huì )根據你安裝的應用服務(wù)不同而不同。如果你輸入了URL,你將會(huì )看到以<wsdl:definitions>為根結點(diǎn)的xml文件。這個(gè)文件叫做web服務(wù)的WSDL.如果你看到了這個(gè)文件,那么初步驗證你的Web服務(wù)有效。
但是這個(gè)驗證還不夠。有時(shí)候情況會(huì )復雜一些,你可以看到WSDL,但是客戶(hù)端卻無(wú)法訪(fǎng)問(wèn)Web服務(wù)。因此要真正檢驗Web服務(wù)是否真的好使,就要用客戶(hù)端程序對Web服務(wù)作一次真正的調用。
摘要:在《XFire:開(kāi)發(fā)Web服務(wù)的簡(jiǎn)易之道(二)》中最后提到過(guò):要想檢驗Web服務(wù)是否有效,需要一個(gè)客戶(hù)端程序實(shí)際調用一下這個(gè)Web服務(wù)。本章我們就來(lái)創(chuàng )建這樣一個(gè)用于檢驗的客戶(hù)端程序,驗證一下我們前面的工作是不是真的有效。最后總結一下用XFire開(kāi)發(fā)Web服務(wù)的步驟。
創(chuàng )建客戶(hù)端程序
我們可以使用很多方法,任何SOAP工具來(lái)創(chuàng )建客戶(hù)端程序,例如.Net或Apache Axis。我的這個(gè)例子中我是用一個(gè)名叫WsClient.java的Servlet中的動(dòng)態(tài)代理。為了減少編碼的代價(jià),我將所有屏幕構建元素都放到doGet()方法中。對Web服務(wù)服務(wù)的實(shí)際調用在callWebService()方法中。代碼很簡(jiǎn)單:

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