簡介:
XFire是新一代的Java Web服務引擎,XFire使得在JavaEE應用中發佈Web服務變得輕而易舉。和其他Web服務引擎相比,XFire的配置非常簡單,可以非常容易地和Spring集成,它使得Java開發人員終於可以獲得和.Net開發人員一樣的開發效率。
XFire是codeHaus組織提供的一個開源框架,它構建了POJO和SOA之間的橋樑,主要特性就是支持將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: