XFire組件開發WebService實例

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開源社區擁有衆多的追隨者。而且由於XFireSpring提供的支持,使得咱們能夠很容易在Spring中使用XFire構建Web Service應用。 app

  XFire Axis2相比具備以下特徵: 框架

·         支持一系列Web Service的新標準--JSR181WSDL2.0 JAXB2WS-Security等; jsp

·         使用Stax解釋XML,性能有了質的提升。XFire採用Woodstox Stax實現; 分佈式

·         容易上手,能夠方便快速地從pojo發佈服務;

·         靈活的Binding機制,包括默認的Aegis,xmlbeans,jaxb2,castor

·         高性能的SOAP 棧設計;

·         支持SpringPicoPlexusLoom等容器。

  XFire Axis1性能的比較以下:

·         XFire 比Axis1.32-6倍;

·         XFire 的響應時間是Axis1.31/21/5

  XFire WebService框架中開始較晚,它從現有的框架中借鑑了許多優秀的理念,力爭將Web Service的應用開發難度降到最低。此外,還提供了各類綁定技術、支持多種傳輸協議,對WebService體系中許多新的規範提供了支持。 

2.  XFire組件下載

XFire在2007年後已中止更新。正式改名爲Apache CXF,亦能夠說是XFire2.0

  XFire - XFire安裝包:XFire框架目前最後的一個版本是1.2.6,在200753日發佈,能夠訪問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發佈時的一些有用的信息。

 

3Eclipse使用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 內部訪問webservice

內部訪問webserviceclient代碼大體以下:

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的簡單實例大體就完成了!
相關文章
相關標籤/搜索