正確地在Axis、Axis2和ApacheCXF之間抉擇

字號(hào):

如何正確地在Axis、Axis2和Apache CXF之間抉擇?
    關(guān)鍵字: axis axis2 cxf spring
    新一代的 Web Services 框架如 Axis2、CXF 都是由現(xiàn)有的項(xiàng)目中逐漸演化而來的,Axis2 是由大家熟悉的 Axis 1.x 系列演化過來,而 Apache CXF 則是由 Celtix 和 XFire 項(xiàng)目整合而生,并且剛剛發(fā)布了 2.0.2 的最新版本,不過仍是 Apache 的一個(gè)孵化項(xiàng)目。
    Axis2 是對(duì) Axis 進(jìn)行了徹底的重寫的一個(gè)新項(xiàng)目了,它使用了新的模塊化架構(gòu),更方便于功能性的擴(kuò)展等等。
    Apache CXF 則是由 XFire 和 Celtix 兩個(gè)現(xiàn)有的項(xiàng)目進(jìn)行了重組。
    問題:如果現(xiàn)有的應(yīng)用程序是基于 Axis 1.x、XFire 或者 Celtix 的話,那應(yīng)該怎么辦?都遷移到這些新的框架上去嗎?但是即使是要遷移,那應(yīng)該遷移到哪個(gè)框架上去呢?
    如果是編寫一個(gè)新的 Web Services 應(yīng)用程序的話,就不存在遷移的問題了,但是哪個(gè)框架是你應(yīng)當(dāng)選擇進(jìn)行使用的呢?哪個(gè)比哪個(gè)更好呢?
    對(duì)于現(xiàn)在的應(yīng)用程序的遷移,如果你的應(yīng)用程序是穩(wěn)定而成熟的,并且在可預(yù)知的未來的情況下,只要很少的一些需求變更要做的話,那么保存你的體力,不要去做“勞民傷財(cái)“的遷移工作了。
    如果你的現(xiàn)有應(yīng)用程序BUG纏身,性能,功能等等都一片糟糕的話,那就要考慮遷移了,那選哪個(gè)框架呢?先比較一下它們的不同之處:
    1、Apache CXF 支持 WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile
    2、Axis2 支持 WS-Addressing、WS-RM、WS-Security和WS-I BasicProfile,WS-Policy將在新版本里得到支持
    3、Apache CXF 是根據(jù)Spring哲學(xué)來進(jìn)行編寫的,即可以無縫地與Spring進(jìn)行整合
    4、Axis2 不是
    5、Axis2 支持更多的 data bindings,包括 XMLBeans、JiBX、JaxMe 和 JaxBRI,以及它原生的 data binding(ADB)。
    6、Apache CXF 目前僅支持 JAXB 和 Aegis,并且默認(rèn)是 JAXB 2.0,與 XFire 默認(rèn)是支持 Aegis 不同,XMLBeans、JiBX 和 Castor 將在 CXF 2.1 版本中得到支持,目前版本是 2.0.2
    7、Axis2 支持多種語言,它有 C/C++ 版本。
    8、Apache CXF 提供方便的Spring整合方法,可以通過注解、Spring標(biāo)簽式配置來暴露Web Services和消費(fèi)Web Services
    如何抉擇:
    1、如果應(yīng)用程序需要多語言的支持,Axis2 應(yīng)當(dāng)是首選了;
    2、如果應(yīng)用程序是遵循 Spring 哲學(xué)路線的話,Apache CXF 是一種更好的選擇,特別對(duì)嵌入式的 Web Services 來說;
    3、如果應(yīng)用程序沒有新的特性需要的話,就仍是用原來項(xiàng)目所用的框架,比如 Axis1,XFire,Celtrix 或 BEA 等等廠家自己的 Web Services 實(shí)現(xiàn),就別勞民傷財(cái)了。
    我個(gè)人舉個(gè)例子例如,像電信這種企業(yè),他們的系統(tǒng)構(gòu)成十分復(fù)雜。有的是很多年以前的老系統(tǒng),有的是最近才開發(fā)出來投入使用的。有的用.NET,有的用C++,有的用Java。使用的技術(shù)也是五花八門。而且他們有個(gè)習(xí)慣,就是決不把一個(gè)系統(tǒng)給一個(gè)公司完成,而是拆成多個(gè)模塊,分別給不同的廠商完成。在這中背景下,我不敢相信使用自己拍腦袋想出來的協(xié)議而不使用公開的大家都接收的協(xié)議會(huì)是一個(gè)什么后果。