1.websevice簡介 java
WebService又是一種高級應用,與以前學習的Struts、Spring、Hibernate等框架不一樣。WebService是面向服務的架構(SOA)。那麼它究竟是作什麼用的?什麼纔是面向服務的架構?讓咱們來看一種需求,集團公司可能具備多種WEB應用。好比,前年開發了個進銷存系統、去年開發了一個ERP、今年又開發了一個OA。如今這家集團公司須要將這三個系統整合,難道須要從新編碼將它們整合嗎?而這三個系統又是用不一樣語言編寫的,這種成本對公司來講無疑是一種浪費。WebService能夠很好的解決這種需求。 web
WebService是能夠進行跨語言、跨平臺、分佈式系統間整合的方案,WebService像是一條線將這些系統穿起來——企業服務總線(ESB)。WebService使用簡單對象訪問協議(SOAP)使用http協議傳輸xml數據(xml是最經常使用的,也有其餘格式數據。)來完成繫帶間的整合。 apache
什麼是整合?固然是功能和數據的整合,也就是一個系統能夠調用另外一個系統的WebService接口來完成數據的交互。這樣咱們就須要知道,提供WebService服務功能的應用公開了哪些接口,咱們能夠經過WebService描述文檔(WSDL)得知。WSDL不須要咱們手動編寫,Java的WebService實現能夠爲咱們自動生成。JDK1.6新增支持WebService,但還不夠成熟。因此咱們可使用一些第三方開源組織提供的WebService組件。 api
2、Xfire組件 tomcat
XFire 是與Axis 2並列的新一代Web Service框架,經過提供簡單的API支持Web Service各項標準協議,幫助你方便快速地開發Web Service應用。 架構
相對於Axis來講,目前XFire相對受歡迎,加上其提供了和Spring集成的支持,在目前的Web Service開源社區擁有衆多的追隨者。而且由於XFire爲Spring提供的支持,使得咱們能夠很容易在Spring中使用XFire構建Web Service應用。 app
XFire 與Axis2相比具備以下特徵: 框架
· 支持一系列Web Service的新標準--JSR181、WSDL2.0 、JAXB2、WS-Security等; jsp
· 使用Stax解釋XML,性能有了質的提升。XFire採用Woodstox 做Stax實現; 分佈式
· 容易上手,能夠方便快速地從pojo發佈服務;
· 靈活的Binding機制,包括默認的Aegis,xmlbeans,jaxb2,castor;
· 高性能的SOAP 棧設計;
· 支持Spring、Pico、Plexus、Loom等容器。
XFire 與Axis1性能的比較以下:
· XFire 比Axis1.3快2-6倍;
· XFire 的響應時間是Axis1.3的1/2到1/5。
XFire 在WebService框架中開始較晚,它從現有的框架中借鑑了許多優秀的理念,力爭將Web Service的應用開發難度降到最低。此外,還提供了各類綁定技術、支持多種傳輸協議,對WebService體系中許多新的規範提供了支持。
2. XFire組件下載
XFire在2007年後已中止更新。正式改名爲Apache CXF,亦能夠說是XFire2.0。
XFire - XFire安裝包:XFire框架目前最後的一個版本是1.2.6,在2007年5月3日發佈,能夠訪問xfire.codehaus.org下載XFire框架的安裝包。
解壓縮後造成的文件目錄結構以下:
· api目錄:api目錄中是XFire框架中全部類(class)對應的API文檔,爲開發者使用XFire完成應用開發提供幫助。
· examples目錄:examples目錄中包含了全部隨XFire二進制包發佈的實例,包括這些實例的源代碼和相關Web應用配置內容。
· lib目錄:lib目錄中包含XFire運行所須要的外部支持類包(.jar文件),能夠根據不一樣項目所需的XFire特性選擇所須要的支持類包。保守的方法是在Web項目中包含全部的外部支持類包(.jar文件)。
· manual目錄:manual目錄中包含有XFire框架的幫助文檔,開發者能夠從這些幫助文檔中學習更多運用XFire框架實現SOA的知識和技巧。
· modules目錄:modules目錄中包含了XFire框架根據不一樣特性分別編譯的二進制包文件。發佈基於XFire框架的Web項目時,能夠選擇使用該目錄下的全部.jar文件,也能夠選擇XFire-all-1.2.6.jar文件。
· XFire-all-1.2.6.jar:XFire框架的二進制包文件,包含了所有的模塊(modules)。
· LICENSE.txt:LICENSE.txt文件中包含了XFire框架的受權協議。
· NOTICE.txt/README.txt:這兩個文件中包含了XFire發佈時的一些有用的信息。
3、Eclipse使用XFire組件開發WebService實例
Ø 服務端開發
服務端的開發主要爲外部提供webservice服務。Eclipse的大體目錄結構以下:
首先須要在lib中導入xfire相關的jar包,大體須要導入以下jar包:
其次須要在web.xml中配置以下的信息:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>XFireServlet</servlet-name> <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>具體配置的信息就不說了, 以後在配置好相關須要被調用的接口與方法,這個視自身須要狀況而定。我 這裏大體寫的是求和的接口,IBankService
package com.mybank.xfire.example; public interface IBankService { public int c(int a,int b); }
實現的類BankingService實現求和
ackage com.mybank.xfire.example; public class BankingService implements IBankService { @Override public int c(int a, int b) { // TODO Auto-generated method stub return a+b; } }
而後在services.xml配置相關的bean信息,指定相關調用的名稱,命名空間以及實現接口和實現類。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xfire.codehaus.org/config/1.0"> <service> <name>Banking</name> <namespace>mybank</namespace> <serviceClass>com.mybank.xfire.example.IBankService</serviceClass> <implementationClass>com.mybank.xfire.example.BankingService</implementationClass> </service> </beans>
這樣,xfire的webservice服務大體搭建成功了,啓動相關的tomcat便可,訪問wsdl的相關地址,看到有wsdl的相關信息即說明服務端搭建成功了。
Ø 客戶端的開發
Xfire的客戶端主要分爲2種訪問方式(以目前的水平知道有這兩種),遠程訪問以及內部訪問,如下是兩種訪問方式的大體實現:
l 遠程訪問webservice
client大體目錄結構以下:
首先導入相關的jar包,如上所述基本是同樣的。相關的client的代碼以下(其中c指的是所調用的方法):
package com.mybank.xfire.client; import java.net.MalformedURLException; import java.net.URL; import org.codehaus.xfire.client.Client; public class AddWSClient { /** * @param args * @throws Exception * @throws MalformedURLException */ public static void main(String[] args) throws MalformedURLException, Exception { Client client = new Client(new URL("http://localhost:8080/testWebservice/services/Banking?wsdl")); Object[] result = client.invoke("c",new Object[]{2,3}); System.out.println(result[0]); } }
l l 內部訪問webservice
內部訪問webservice的client代碼大體以下:
package com.mybank.xfire.client; import org.codehaus.xfire.XFire; import org.codehaus.xfire.XFireFactory; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; import com.mybank.xfire.example.IBankService; import com.sun.org.apache.xerces.internal.util.URI.MalformedURIException; public class BankClient { public static void main(String[] args) throws MalformedURIException, Exception { BankClient bank = new BankClient(); int s = bank.callWebService(2,3); System.out.println(s); } public int callWebService(int a,int b) throws MalformedURIException,Exception { //Create a metadata of the service 建立一個service的元數據 Service serviceModel = new ObjectServiceFactory().create(IBankService.class); //Create a proxy for the deployed service 爲XFire得到一個代理工廠那個對象 XFire xfire = XFireFactory.newInstance().getXFire(); XFireProxyFactory factory = new XFireProxyFactory(xfire); //獲得一個服務的本地代理 String serviceUrl = "http://localhost:8080/testWebservice/services/Banking"; IBankService client = null; try { client = (IBankService) factory.create(serviceModel, serviceUrl); } catch (Exception e) { System.out.println("WsClient.callWebService():Exception:"+e.toString()); } //invoke the service 調用服務 返回狀態結果 int serviceResponse = 0; try { serviceResponse = client.c(a, b); } catch (Exception e) { e.printStackTrace(); } return serviceResponse; } }Console輸出5,則說明調用成功,至此,xfire的簡單實例大體就完成了!