web.xml
說明: 這裏主要配置了 spring 的配置文件地址, spring 監聽器、 CXF 核心控制器。
applicationContext.xml
說明:
在 spring 的配置文件中使用 jaxws:endpoint 元素來暴露 WebService ,這裏有兩種方式:
然後我們就可以將工程部署到 tomcat 中,在瀏覽器中使用
地址 http://localhost:8080/cxf_spring/myService 訪問我們的 WebService 工程。
MyClient.java
註意: myService 指定我們的服務名字(在 web.xml 中配置),而 fkjava 指定服務提供者的地址(在 applicationContext.xml 中配置)。同時這種集成不好,因為將地址寫死了,沒有使用 spring 的註入方式。
我們看 HelloWorldWs.java 這個服務類:
可以看到其中的實際業務處理類還是使用的手工方法進行實例化,沒有使用 spring 的註入方式。
在 spring 的配置文件中改變暴露 WebService 的方式:
說明: 加 # 號是為了讓服務器知道這個名字不是壹個類 ,而只是壹個 id 。
然後改造 HelloWorldWs.java 服務類:
然後我們再次使用之前的地址進行訪問,發現效果還是壹樣的。
在上面配置的基礎上進行添加,在 applicationContext.xml 中:
此時,和以前壹樣我們需要在客戶端(工程 Call_CXFSpring )那邊加上攔截器,添加上用戶名和密碼的頭,然後對服務器進行訪問。以此來進行驗證。客戶端中我們運行類:
MyClient.java
訪問服務端。
傳統的 SSH 項目中,壹般在本地是有相關的數據的,但是有壹種場景是我們需要調用別人的數據,但是別人的數據不可能讓我們進行修改等操作,那麽別人只會暴露壹個 WebService ,而我們就需要去調用別人的 WebService 服務器。我們在訪問別人時,只能得到 WSDL 文檔。此時我們的項目中就不需要業務邏輯組件了,直接去調用別人的 WebService 的壹個代理即可。
首先我們拷貝上面的工程,改名為 cxf_springClient ,然後需要增加 struts2 的相關 jar 包:
將原有的壹些包刪掉,留下權限包 org.fkjava.cxf.ws.auth 。然後我們啟動工程 Auth_Server 提供遠程服務。在 web 工程中生成相應的包及程序。
web.xml
說明: 這裏我們不再需要 CXF 的 servlet 了,因為不需要業務類了,我們直接調用遠程業務即可。同時配置 struts2 的核心控制器。
applicationContext.xml
說明: 這裏我們同樣不需要業務類了,但是需要配置遠程業務代理類( serviceClass )。同時註意:不要將端口設置為8080,會沖突。可以看到我們使用 serviceClass 將接口配置進去,而這裏的 id 不能隨便寫,要和 action 中定義的接口名壹致。由於遠程服務器設置了權限攔截,所以這裏使用過濾器將用戶名和密碼設置到 wsdl 文檔的頭中。然後在這個類中我們需要使用 execute 方法去獲取相應的數據。
struts.xml
ListCatsAction .java
說明: 此時我們就可以使用地址 http://localhost:8080/cxf_springClient/listCats 進行訪問了,當然會報找不到 jsp 的錯誤。
content/listCats.jsp
說明: 此時訪問就可以看到