摘要:
問(wèn)過(guò)一些.NET程序員:開發(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ù)還是被認(rèn)為是一個(gè)較新的技術(shù),這是Web服務(wù)在Java上難于實(shí)現(xiàn)的主要原因.
如今,隨著新一代Web服務(wù)引擎--XFire的發(fā)布, 一切發(fā)生了翻天覆地的變化.
使用XFire,你不需要寫一句代碼就可以將Java類方法轉(zhuǎn)換成Web服務(wù).
閱讀本文,你將領(lǐng)略到XFire是如何將開發(fā)Web服務(wù)變得無(wú)比輕松,簡(jiǎn)易的.
?
Web服務(wù)
Web服務(wù)允許我們建立應(yīng)用組件放置于網(wǎng)絡(luò)上的分布式系統(tǒng).?不管這些應(yīng)用組件是怎么寫的,使用什么語(yǔ)言寫的,要運(yùn)行在什么操作系統(tǒng)上, 我們都能以統(tǒng)一的方式訪問(wèn)這些組件.如果一個(gè)Web服務(wù)有效并且設(shè)計(jì)實(shí)現(xiàn)了互用性問(wèn)題,那么無(wú)論你的應(yīng)用是用什么語(yǔ)言,在什么平臺(tái)上開發(fā)的,都可以使用這些服務(wù).?
?為了實(shí)現(xiàn)平臺(tái)無(wú)關(guān),實(shí)現(xiàn)獨(dú)立的訪問(wèn)Web服務(wù), 業(yè)界制定了一系列技術(shù)標(biāo)準(zhǔn),下面是一些最重要的技術(shù):
?* XML
?* SOAP
?* WSDL
下圖展示了上述技術(shù)在工作環(huán)境中是如何使用的.

在這里,提供者是可以提供服務(wù)的應(yīng)用組件, 申請(qǐng)者是需要使用服務(wù)的客戶端程序. 很多其他技術(shù)也參與了這個(gè)交互過(guò)程,但是這里只顯示了在Web服務(wù)環(huán)境中必不可少的核心組件.
XFire
XFire是一個(gè)免費(fèi)的,開源的SOAP框架. 它不僅允許你
輕松簡(jiǎn)易地實(shí)現(xiàn)這么一個(gè)環(huán)境.而且還提供了很多先進(jìn)的特性.不錯(cuò),你沒(méi)有看錯(cuò),"
輕松簡(jiǎn)易". 本文中你將會(huì)看到用XFire構(gòu)建Web服務(wù)是多么的簡(jiǎn)單.如果你的Web應(yīng)用有一個(gè)Java類, 現(xiàn)在你希望這個(gè)類編程Web服務(wù),用XFire完成這一工作你不必寫一句代碼.僅需操作一下部署描述器,你就會(huì)得到一個(gè)Web服務(wù). 是的, 就是這么簡(jiǎn)單.讓我們來(lái)看個(gè)例子.
一個(gè)簡(jiǎn)單的Java類
我的這個(gè)例子是一個(gè)位于Apache Tomcat 5.5.7主機(jī)運(yùn)行在J2SE 1.4.2_07下的銀行應(yīng)用. 我假設(shè)你已經(jīng)知道如何使用Java編寫web應(yīng)用并且已經(jīng)配置了Tomcat服務(wù)器.我們的這個(gè)應(yīng)用很簡(jiǎn)單,? 只完成一項(xiàng)工作, 就是將錢從一個(gè)帳戶轉(zhuǎn)到另一個(gè)帳戶.BankingService類中的transferFunds()為我們完成這一工作. 他需要4個(gè)傳入?yún)?shù)
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è)公共的默認(rèn)構(gòu)造函數(shù).這個(gè)構(gòu)造函數(shù)是必不可少的,因?yàn)閄Fire要用他來(lái)實(shí)例這個(gè)類.
因?yàn)槭褂媒涌趤?lái)完成是很好的實(shí)踐,因此我們的類也實(shí)現(xiàn)了一個(gè)名叫IBankingService的接口.代碼很簡(jiǎn)單:
package?com.mybank.xfire.example;


public?interface?IBankingService?
{??

????public?String?transferFunds(
????????String?fromAccount,?String?toAccount,?double?amount,?String?currency);
????????
}

實(shí)際開發(fā)中,這個(gè)方法可能包含所有復(fù)雜的調(diào)用,請(qǐng)求和處理操作,但是我們的例子將其最小化以便我們能將精力集中到我們的目標(biāo)上:將這個(gè)方法轉(zhuǎn)換成Web服務(wù).
你可以看到,我們的BankingService只不過(guò)是一個(gè)普通的Java類,沒(méi)有任何代碼說(shuō)明它是否在Web服務(wù)中使用.這就對(duì)了!我們不需要寫任何代碼,所有工作都交給部署描述去處理.
后面我將介紹如何編寫部署描述。
XFire:開發(fā)Web服務(wù)的簡(jiǎn)易之道(二)--Web應(yīng)用的部署配置
posted on 2006-05-15 14:46
學(xué)二的貓 閱讀(3246)
評(píng)論(3) 編輯 收藏 所屬分類:
Java禪機(jī)