百度百科
什麼是CXF
Apache CXF = Celtix + Xfire 支援多種協定: •SOAP1.1,1,2 •XML/HTTP •CORBA(Common Object Request Broker Architecture公共對象請求代理體系結構,早期語言使用的WS。C,c++,C#) •并可以與Spring進行快速無縫的整合 •靈活的部署:可以運作在Tomcat,Jboss,Jetty(内置),IBMWS,BeaWL上面。
1、jax-ws是Sun公司釋出的一套開發WebService服務的标準。早期的标準如jax-rpc已經很少使用(在目前的jdk當中也沒有附帶這個工具,axis就是使用的這個标準。)。而cxf就是在新标準jax-ws下開發出來的WebService,jax-ws也内置到了jdk1.6當中。(對于2006年以前的jax-rpc(remoteprocess call)就不要再去研究了)。
2、關于更多Jax-ws規範的說明請見官方釋出的文檔:本目錄下的jax-ws.pdf。
3、關于與Spring的整合,将後後面的章節講解。最終将我們的服部署到Tomcat伺服器上。
4、在CXF之前的許多WebService架構如:axis,xFire有興趣的同學可以自己去了解一下。
1、需要說明的是:我下載下傳的是最新版本的cxf架構,它基于jdk1.7建立,目前我們機上安裝的都是jdk1.6.
等一會兒對于使用cxf2.4生成的用戶端代碼要進行适當的調整
Bus
Bus是CXF架構的支撐.CXF Bus由spring配置檔案構成(cxf.xml),在servlet初始化時
通過SpringBusFactory加載,它為所有終端定義了公共的上下文.它織入了所有運作
時的結構元件并提供了一個公共的應用上下文.SpringBusFactory掃描并加載類路徑
下的META-INF/cxf目錄并從以下檔案建構上下文.
META-INF/cxf/cxf.xml
META-INF/cxf/cxf-extension.xml
META-INF/cxf/cxf-property-editors.xml
XML檔案是安裝CXF類庫的一部分.CXF内部使用Spring配置.cxf.xml檔案中bus定義如
下:
<bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl" />
核心bus元件是CXFBusImpl,該類更多扮演攔截器供應商的角色對于終端出入的請求.
這些攔截器一旦應用,即可用于上下文中所有的終端.cxf.xml檔案也定義了其他的組
件,比如BindingFactoryManager,ConduitFactoryManager等等.這些元件可用于bus
的擴充.可以使用getExtension()方法這些元件.注冊這些元件以用于擷取或更新服
務終端級别參數如服務綁定,傳輸協定,中轉等等.
--------------
Frontend-前端:
Frontend
CXF提供了前端模組化的概念,可以使用不同的前端API建立ws.這些API使用簡單工廠
bean和JAX-WS實作建立ws.可以建立動态ws用戶端.CXF支援的前端主要是JAX-WS.
---------
Messageandintercetpors:
消息和攔截器
CXF架構中重要的元件之一是攔截器元件.攔截器攔截用戶端和伺服器間的消息.在
CXF,這通過攔截器鍊的概念實作.攔截器鍊是CXF運作時的核心功能.鍊中的每個攔截
器是可配的,使用者可以控制他的執行.
架構的核心的是攔截器接口,它定義了兩個方法handleMessage和handleFault,都攜
帶Message類型作為參數.
攔截器通常分組成各階段.每個階段執行特定的消息處理,每個階段又被添加到攔截
器鍊中,是以,鍊有時有序的攔截器階段的清單.典型的ws終端有三個連接配接器鍊:
Inbound messages chain(入消息鍊)
Outbound messages chain(出消息鍊)
Error messages chain(錯誤消息鍊)
内置攔截器如日志,安全,也可以自定義攔截器.
-----
Service Model-主要用于生成wsdl檔案的各個元素。
模組化service,建立各種WSDL元素如操作,綁定,終端,schema等等.
如下顯示了服務模型中的各個元件:
-------
Databinding
資料綁定是ws開發的關鍵.它意味着java對象和xml元素之間的映射.資料綁定元件執
行這一工作.CXF最新版本使用JAXB2.1.JAXB使用注解定義java對象和XML之間的映射.如下:
@XmlRootElement(name="processOrder",
namespace="http://localhost/orderprocess")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="processOrder",namespace="http://localhost/orderprocess")
public class OrderProcess {
@XmlElement(name="arg0",namespace="")
privateorder.Order arg0;
//Gettter and Setter
…
}
-----------
協定綁定:protocol bindings
CXF支援以下形式的綁定:
SOAP1.1
SOAP1.2
CORBA
Pure XML
--
資料傳輸——transport
CXF支援以下資料傳輸方式:
HTTP
CORBA
JMS
LOCAL
安裝CXF的其他支援項目:
lAnt lTomcat l并設定以下環境變量: •JAVA_HOME •CXF_HOME •ANT_HOME •CATALINA_HOME •Path =%JAVA_HOME%\bin;%CXF_HOME%\bin;%CATALINA_HOME%\bin;%ANT_HOME%\bin •CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest.jar ;.\build\classes
1、為什麼要用到ant這個工具呢?Ant做為一種工具已經廣泛被使用,并且曆史悠久。使用ant的内置指令,可以編譯java源檔案(javac),運作java檔案(java),給class檔案打包(jar、war、ear),也可以建立(mkdir)、删除(del)、拷貝(copy),甚至可以使用ant執行sql檔案。由于ant是用xml語言寫成的檔案,并取預設名為build.xml檔案。是以,今後大家應該在見到名為build.xml檔案時知道這是一個ant的檔案。
2、預設在Eclipse和MyEclipse的對ant有内建的支援。大家可以在MyEclipse中任意項目中建立一個檔案叫build.xml檔案,你會發現它有不同的圖示(上面有個小螞蟻)。