摘要: 問(wèn)過(guò)一些.NET程序員:開(kāi)發(fā)Web服務(wù)有多艱苦? 他們被我的問(wèn)題逗樂(lè )了! 他們回答說(shuō):用時(shí)小于1分鐘.
同樣的問(wèn)題,我又問(wèn)了一個(gè)Java程序員, 得到的回答與先前.Net程序員的大相徑庭.
Web服務(wù)這個(gè)概念引入Java已經(jīng)有5年了.然而Web服務(wù)還是被認為是一個(gè)較新的技術(shù),這是Web服務(wù)在Java上難于實(shí)現的主要原因.
如今,隨著(zhù)新一代Web服務(wù)引擎--XFire的發(fā)布, 一切發(fā)生了翻天覆地的變化.
使用XFire,你不需要寫(xiě)一句代碼就可以將Java類(lèi)方法轉換成Web服務(wù).
閱讀本文,你將領(lǐng)略到XFire是如何將開(kāi)發(fā)Web服務(wù)變得無(wú)比輕松,簡(jiǎn)易的.
Web服務(wù)
Web服務(wù)允許我們建立應用組件放置于網(wǎng)絡(luò )上的分布式系統. 不管這些應用組件是怎么寫(xiě)的,使用什么語(yǔ)言寫(xiě)的,要運行在什么操作系統上, 我們都能以統一的方式訪(fǎng)問(wèn)這些組件.如果一個(gè)Web服務(wù)有效并且設計實(shí)現了互用性問(wèn)題,那么無(wú)論你的應用是用什么語(yǔ)言,在什么平臺上開(kāi)發(fā)的,都可以使用這些服務(wù).
為了實(shí)現平臺無(wú)關(guān),實(shí)現獨立的訪(fǎng)問(wèn)Web服務(wù), 業(yè)界制定了一系列技術(shù)標準,下面是一些最重要的技術(shù):
* XML
* SOAP
* WSDL
下圖展示了上述技術(shù)在工作環(huán)境中是如何使用的.
在這里,提供者是可以提供服務(wù)的應用組件, 申請者是需要使用服務(wù)的客戶(hù)端程序. 很多其他技術(shù)也參與了這個(gè)交互過(guò)程,但是這里只顯示了在Web服務(wù)環(huán)境中必不可少的核心組件.
XFire
XFire是一個(gè)免費的,開(kāi)源的SOAP框架. 它不僅允許你
輕松簡(jiǎn)易地實(shí)現這么一個(gè)環(huán)境.而且還提供了很多先進(jìn)的特性.不錯,你沒(méi)有看錯,"
輕松簡(jiǎn)易". 本文中你將會(huì )看到用XFire構建Web服務(wù)是多么的簡(jiǎn)單.如果你的Web應用有一個(gè)Java類(lèi), 現在你希望這個(gè)類(lèi)編程Web服務(wù),用XFire完成這一工作你不必寫(xiě)一句代碼.僅需操作一下部署描述器,你就會(huì )得到一個(gè)Web服務(wù). 是的, 就是這么簡(jiǎn)單.讓我們來(lái)看個(gè)例子.
一個(gè)簡(jiǎn)單的Java類(lèi)
我的這個(gè)例子是一個(gè)位于A(yíng)pache Tomcat 5.5.7主機運行在J2SE 1.4.2_07下的銀行應用. 我假設你已經(jīng)知道如何使用Java編寫(xiě)web應用并且已經(jīng)配置了Tomcat服務(wù)器.我們的這個(gè)應用很簡(jiǎn)單, 只完成一項工作, 就是將錢(qián)從一個(gè)帳戶(hù)轉到另一個(gè)帳戶(hù).BankingService類(lèi)中的transferFunds()為我們完成這一工作. 他需要4個(gè)傳入參數
String fromAccount String toAccount double amount String currency
下面是代碼:
package com.mybank.xfire.example;
import java.text.NumberFormat;
import java.text.DecimalFormat;
/** *//** XFire WebServices sample implementation class.
*/
public class BankingService implements IBankingService {
//Default constructor.
public BankingService(){
}
/** *//** Transfers fund from one account to another.
*/
public String transferFunds(
String fromAccount, String toAccount, double amount, String currency){
String statusMessage = "";
//Call business objects and other components to get the job done.
//Then create a status message and return.
try {
NumberFormat formatter = new DecimalFormat("###,###,###,###.00");
statusMessage = "COMPLETED: " + currency + " " + formatter.format(amount)+
" was successfully transferred from A/C# " + fromAccount + " to A/C# " + toAccount;
} catch (Exception e){
statusMessage = "BankingService.transferFunds(): EXCEPTION: " + e.toString();
}
return statusMessage;
}
} 在上面的代碼中你看到奇怪的代碼了嗎? 大概沒(méi)有吧. 除了那個(gè)公共的默認構造函數.這個(gè)構造函數是必不可少的,因為XFire要用他來(lái)實(shí)例這個(gè)類(lèi).
因為使用接口來(lái)完成是很好的實(shí)踐,因此我們的類(lèi)也實(shí)現了一個(gè)名叫IBankingService的接口.代碼很簡(jiǎn)單:
package com.mybank.xfire.example;
public interface IBankingService {
public String transferFunds(
String fromAccount, String toAccount, double amount, String currency);
}
實(shí)際開(kāi)發(fā)中,這個(gè)方法可能包含所有復雜的調用,請求和處理操作,但是我們的例子將其最小化以便我們能將精力集中到我們的目標上:將這個(gè)方法轉換成Web服務(wù).
你可以看到,我們的BankingService只不過(guò)是一個(gè)普通的Java類(lèi),沒(méi)有任何代碼說(shuō)明它是否在Web服務(wù)中使用.這就對了!我們不需要寫(xiě)任何代碼,所有工作都交給部署描述去處理.
后面我將介紹如何編寫(xiě)部署描述。
XFire:開(kāi)發(fā)Web服務(wù)的簡(jiǎn)易之道(二)--Web應用的部署配置