<翻譯 from tss>
Axis、Axis2和CXF:俯瞰WS風景
--bye Biorn Townsend
從事open source 的 web services開發是令人興奮的。去年下半年發布了兩個下一代的web services框架,他們都在Apache軟件基金會下面。這兩個框架分別是,在2006年四月末發布1.0的Apache Axis2,目前處在1.3的候選發布版本階段(譯注:1.3已經發布);Apache CXF,它在2007年7月初發布了2.0版本(以CXF命名的第一個發布版本)。
這兩個框架都是從已有項目中進化過來的。Axis2來自眾所周知的Axis 1.x 系列。CXF按照字面來說是XFire和Celtix兩個項目的后續,這兩個項目融會了他們的代碼庫和開發團隊就有了CXF。不論從哪個角度來看新舊項目之間都有顯著區別。Axis2完全從頭重寫了Axis,使用了能夠讓功能更容易擴展的新模塊架構。CXF從XFire和Celtix這兩個起源上也做了廣泛重構。
這引發了一些問題。已有使用Axis 1.x,XFire或者是Celtix的應用程序是否要移植到這些項目的新版本上呢?如果一個開發者決定要移植他(她)的應用到其中的一個新版本上,那他應該用哪個呢?相反的,如果某人正在從頭開始開發新的web service又無需考慮移植,那他(她)又應該用哪個呢?是否一個框架生來就優于其他的呢?
讓我們逐個處理這些問題。首先,已有應用是否需要移植?回答這個問題很大程度上依賴于你的應用到達了生命周期的哪個階段。對于一個非常穩定成熟的項目,如果在可預計的未來很少或者根本不需要變化,那它可能就不需要移植,因為當前的框架很好的滿足了需求。如果應用的性能或者功能受bug影響,那移植就值得做,特別是對使用Axis 1.x 的用戶來說,因為圍繞Axis的大部分開發者社區都把資源轉向了Axis2。Axis 1.5 版本雖然正在進行中,但可能要數月才能完成。
對于需要移植的項目來說,最簡單的就是移植到當前框架的下一個版本上。Axis2和CXF都為開發者提供了從之前版本到新版本的移植技巧指南,但他們都沒有為web service從一個框架移植到另一個框架提供工具或者指南。盡管如此,對這類移植來說,查看所有可用的選擇都是有價值的。在web service開發上Axis2和CXF走了不同的路子,對某些開發者來說,其中一條總比另一條需要付出更多。
這給我們帶來了比較Axis2和CXF二者功過的好的角度。當然有二者很多可比較的地方,web services框架都必然地要滿足所有相同需求,但因為這二者都非常年輕,都有某些領域比其他的做得更好。主要不同列在下面:
* CXF支持WS-Addressing,WS-Policy,WS-RM,WS-Security 和 WS-I 基本規范。Axis2支持除WS-Policy之外的所有協議,WS-Policy也會在即將到來的版本支持。
* CXF很容易和Spring集成,而Axis2不。
* Axis2支持范圍更大的數據綁定,包括XMLBeans、JiBX、JaxMe和JaxBRI同時還有它自帶的數據綁定方式--ADB。注意對JaxME和JaxBRI的支持在Axis2 1.2中仍然處在實驗階段。CXF目前僅支持JAXB和Aegis,對XMLBeans、JiBX和Castor的支持將會在CXF 1.2中實現。
* Axsi2支持多種語言--在java版本之外還有C/C++的版本可用。
然而在比較這些框架時,比較他們開發web services的方法與比較它們的特性同樣重要。從開發者的角度看,這些框架彼此之間完全不同。Axis2走的路子在很多方面都像是一個微型的應用服務器。Axis2打包成WAR,這樣它就能發布到像Tomcat之類的servlet容器中,它被設計的使web services更容易管理和發布。Axis2的Web管理模塊允許Axis2在應用運行過程中動態配置--新的服務可以上傳、激活或者使其無效、他們的參數也可以改變。管理UI也允許模塊在一個或者更多的正在運行的服務中生效。唯一不利的一面是,為達到這些目的使用UI所作的改變不能被持久化--servlet容器重啟之后就失效了。
Axis2有利于web services的獨立,不依賴其他應用;提供了廣泛多樣的功能;通過模塊化架構為添加新功能(隨時間流逝,這總是可能的)提供了一個不錯的模型。某些開發者或許會發現為實現他們的需求用Axis2有些太麻煩太笨重。這些開發者可能更喜歡Apache CXF。
CXF專注于開發者的高效和可嵌入性。大部分的配置通過API而不是繁瑣的XML文件來實現,Spring的集成是個重點,包括支持Spring 2.0,CXF的API和Spring的配置映襯的相當緊密。CXF著重代碼優先的設計,簡單的API使從已有應用中開發服務更容易(嵌入性也有利于這點)。
不論你選擇了哪個框架,你都將從活躍穩定的開源社區中受益。每個框架都有公司背景:Axis2源自WSO2,CXF源自Iona。兩者都有活躍的開發者社區。Axis2已經存在很久了,但是CXF進步也很快。我的建議是:如果多語言支持是重要的,Axis2是很明顯的選擇。如果你在意與像Spring之類的項目緊密集成的Java實現,CXF是更好的選擇,特別是對把web services嵌入其他程序的應用來說。如果這些項目中的新特性對你不太重要,而你又相對來說比較滿意Axis1,那么可以考慮繼續使用Axis1并緊跟最新的可用版本,直到有業務上的原因需要移植。
原文地址: http://www.theserverside.com/tt/articles/article.tss?l=AxisAxis2andCXF
btw:
翻完之后發現這篇問題題目雖然比較吸引眼球,可好像也沒說出些實質性內容來,有些地方甚至有些八卦。不過既然翻譯了就貼出來,說不定還能給大家帶來些茶余飯后的談資:)