天天看點

Axis和CXF的比較

在SOA領域,我們認為Web Service是SOA體系的建構單元(building block)。對于服務開發人員來說,AXIS和CXF一定都不會陌生。這兩個産品都是Apache孵化器下面的Web Service開源開發工具。 Axis2的最新版本是1.3.CXF現在已經到了2.0版本。

這兩個架構 都是從已有的開源項目發展起來的。Axis2是從Axis1.x系列發展而來。CXF則是XFire和Celtix項目的結合産品。Axis2是從底層全部重新實作,使用了新的擴充性更好子產品架構。 CXF也重新的深化了XFire和Celtix這兩個開發工具。

新産品的退出導緻了幾個問題。是不是現有的使用Axis 1.x,XFire和Celix的應用需要遷移的新的版本上。如果一個開發人員确定要遷移它的應用到新的架構上,那麼他應該選擇哪一個呢?相反的,如果一個開發者決定從頭開發一個新的Web Service,他應該使用哪個呢? 這兩個架構哪一個更好一些呢?

對于系統遷移來說,也許遷移到新的架構并不難。Axis和CXF都提供了遷移的指導。能夠給開發者一些遷移的技巧和經驗。但是對于這樣遷移,這兩個開源項目都沒有提供遷移的工具。對于這樣的遷移工作,盡管很值得去尋找所有的可行方案。Axis2和CXF都有各自不同的WebService開發方法,每個方法都有相當數量擁護者。

通過一個比較矩陣來比較Axis2和CXF變得有現實的意義。這兩個項目都開發不夠成熟,但是最主要的差別在以下幾個方面:

1.CXF支援 WS-Addressing,WS-Policy, WS-RM, WS-Security和WS-I Basic Profile。Axis2不支援WS-Policy,但是承諾在下面的版本支援。

2. CXF可以很好支援Spring。Axis2不能

3. AXIS2支援更廣泛的資料并對,如XMLBeans,JiBX,JaxMe和JaxBRI和它自定義的資料綁定ADB。注意JaxME和JaxBRI都還是試驗性的。CXF隻支援JAXB和Aegis。在CXF2.1

4. Axis2支援多語言-除了Java,他還支援C/C++版本。

比較這兩個架構的Web Service開發方法與比較它們的特性同樣重要。 從開發者的角度,兩個架構的特性相當的不同。 Axis2的開發方式類似一個小型的應用伺服器,Axis2的開發包要以WAR的形式部署到Servlet容器中,比如Tomcat,通過這些容器可以對工作中的Web Service進行很好的監控和管理。Axis2 的Web administrion子產品可以讓我們動态的配置Axis2.一個新的服務可以上載,激活,使之失效,修改web服務的參數。管理UI也可以管理一個或者多個處于運作狀态的服務。這種界面化管理方式的一個弊端是所有在運作時修改的參數沒有辦法儲存,因為在重新開機動之後,你所做的修改就會全部失效。

Axis2允許自己作為獨立的應用來釋出Web Service,并提供了大量的功能和一個很好的模型,這個模型可以通過它本身的架構(modular architecture)不斷添加新的功能。有些開發人員認為這種方式對于他們的需求太過于繁瑣。這些開發人員會更喜歡CXF。

CXF更注重開發人員的工效(ergonomics)和嵌入能力(embeddability)。大多數配置都可以API來完成,替代了比較繁瑣的XML配置檔案, Spring的內建性經常的被提及,CXF支援Spring2.0和CXF's API和Spring的配置檔案可以非常好的對應。CXF強調代碼優先的設計方式(code-first design),使用了簡單的API使得從現有的應用開發服務變得友善。

不過你選擇Axis2還是CXF,你都可以從開源社群得到大量的幫助。這兩個架構都有商業公司提供服務,WSO2提供AXIS2的支援,Iona提供CXF的支援。這兩公司都有很活躍的開發者社群。 Axis2出現的時間較早,CXF的追趕速度快。我的建議是:如果你需要多語言的支援,你應該選擇AXIS2。如果你需要把你的實作側重JAVA并希望和Spring內建,CXF就是更好的選擇,特别是把你的Web Service嵌入其他的程式中。如果你覺得這兩個架構的新特性對于你并沒有太大的用處,你會覺得Axis1也是不錯的選擇,你應該繼續使用它知道你有充分的理由去更換它。