[Java] Xfire開發WebService

簡介:

         XFire是新一代的Java Web服務引擎,XFire使得在JavaEE應用中發佈Web服務變得輕而易舉。和其他Web服務引擎相比,XFire的配置非常簡單,可以非常容易地和Spring集成,它使得Java開發人員終於可以獲得和.Net開發人員一樣的開發效率。

       XFire是codeHaus組織提供的一個開源框架,它構建了POJOSOA之間的橋樑,主要特性就是支持將POJO通過非常簡單的方式發佈成Web服務,這種處理方式不僅充分發揮了POJO的作用,簡化了Java應用轉化爲Web服務的步驟和過程,也直接降低了SOA的實

現難度,爲企業轉向SOA架構提供了一種簡單可行的方式。


一、開發環境

       運行環境: Tomcat 6.0,,jdk 1.6

      開發工具:Eclipse

二、開發service(服務端)

      開發之前請先下載xfire-distribution-1.2.6.zip壓縮包,並解壓!

      網盤下載連接:百度雲盤

三、進入開發

     1. 在Eclipse中新建一個Dynamic Web Project項目,自定義命名,我命名爲XFireWebService;
     2. 導入XFire用戶庫,該庫中應包含xfire-1.2.6目錄下的xfire-all-1.2.6.jar文件,以及xfire-1.26\lib目錄下的所有jar文件;
     3. 將上述的XFire用戶庫中的所有文件拷貝到XFireWebService項目的WebContent\WEB-INF\lib目錄下;
     4. 修改WebContent\WEB-INF\web.xml配置文件的內容,下面是修改後web.xml(藍色部分),web.xml中添加的servlet映射表明,所有匹配“/services/*”的url請求全部交給org.codehaus.xfire.transport.http.XFireConfigurableServlet來處理;

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
	<display-name>XFireWebService</display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<span style="color:#000099;"><servlet>
		<servlet-name>XFireServlet</servlet-name>
		<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>XFireServlet</servlet-name>
		<url-pattern>/servlet/XFireServlet/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>XFireServlet</servlet-name>
		<url-pattern>/services/*</url-pattern>
	</servlet-mapping></span>
</web-app>

    5. 編寫需要發佈爲WebService的Java接口和實現類,這個例子中是一個非常簡單的XFireServiceInterface.java 和XFireService.java

    接口:XFireServiceInterface.java

<span style="color:#000000;">package com.webservice;

/**
 * 功能描述:XFire服務接口
 * @author By_吥悔
 */
public interface XFireServiceInterface {
	public String print();
	public int sum(int x, int y);
}</span>

    實現類:XFireService.java

<span style="color:#000000;">package com.webservice;

/**
 * 功能描述:XFire服務接口的實現類
 * @author By_吥悔
 */
public class XFireService implements XFireServiceInterface {
	public String print() {
		return "This is XFireService 服務測試成功!";
	}
	
	public int sum(int x, int y) {
		return x + y;
	}
}</span>

    6.WebContent\META-INF目錄下新建xfire文件夾,然後在xfire目錄下添加一個XFire使用的配置文件services.xml,該配置文件中的內容反映了要將哪些java類發佈爲web服務。本例中的services.xml內容如下,XFire會藉助Spring來解析services.xml,從中提取需要發佈爲WebService的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
	<service>
		<name>XFireService</name>
		<namespace>http://com.webservice/XFireService</namespace>
		<serviceClass>com.webservice.XFireService</serviceClass>
	</service>
</beans>
     7. 很多文章介紹到這裏就完了,然而當我按照他們所說的啓動WebService,然後通過http://localhost:8080/XFireWebService/services/XFireService?wsdl來訪問服務描述時,卻拋出了異常,說services.xml文件不存在
org.springframework.beans.factory.BeanDefinitionStoreException:
IOException parsing XML document from class path resource [META-INF/xfire/services.xml]; nested exception isjava.io.FileNotFoundException: class path resource [META-INF/xfire/services.xml] cannot be opened because it does not exist
     8. WebContent\WEB-INF目錄下新建classes文件夾,然後需要將WebContent下的整個META-INF文件夾剪切到新建的classes文件夾下。
到這裏,項目的完整目錄結構如下:


     9. 修改完成,然後再次啓動Tomcat, 在IE中輸入http://localhost:8080/XFireWebService/services/XFireService?wsdl會得到正確的web服務描述文檔如下;


    10. 測試剛發佈的XFire WebService:

    測試類:XfireWebServiceClient.java

package com.webservice.client;

import java.net.MalformedURLException;
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.webservice.XFireServiceInterface;

/**
 * 功能描述:XFire服務測試端
 * @author By_吥悔
 */
public class XfireWebServiceClient {
	public static void main(String[] args) {
		Service serviceModel = new ObjectServiceFactory().create(XFireServiceInterface.class);
		XFire xfire = XFireFactory.newInstance().getXFire();
		XFireProxyFactory factory = new XFireProxyFactory(xfire);
		String serviceUrl = "http://localhost:8080/XFireWebService/services/XFireService";
		XFireServiceInterface client = null;   
		try {
			client = (XFireServiceInterface) factory.create(serviceModel, serviceUrl);
		} catch (MalformedURLException e) {   
			System.err.println( "Client call webservice has exception: " + e.toString());
		}
		
		String result1 = client.print();
		int result2 = client.sum(6, 6);
		System.err.println(result1 + " : " + result2);
	}
}
    打印結果:


--------------------------------------------------------------------------------------------------------------------
一花一世界,一葉一菩提。

我自落葉飄零,尋夢旅途繁忙!

Author:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章