【文檔說明】
1.下載需要的xfire包
下載地址:http://xfire.codehaus.org/Download,下載xfire-distribution-1.2.6.zip文件,並解壓。
新建web項目,取名TestXFire,將解壓目錄下的xfire-all-1.2.6.jar和lib目錄下的所有包導入到項目中。
2.創建類
使用接口的設計是一個好的實踐,所以先創建接口:ITestService,代碼如下:
package com.gdie.xfire.example;
//該接口提供一個方法,用於計算
public interface ITestService {
public int add(int p1, int p2);
}
創建接口實現類
package com.gdie.xfire.example;
public class TestService implements ITestService {
public int add(int p1, int p2) {
// TODO Auto-generated method stub
return p1 + p2;
}
}
3.創建META-INF文件夾
簡便起見,將WebRoot下的META-INF文件夾複製到項目的src下,這樣的話會在部署發佈目錄下web-inf下的classes下自動建立META-INF,而同時WebRoot下也有一個META-INF文件夾,這兩個容易混淆,實際webservice下真正起作用的是web-inf下的classes下的META-INF,所以,關鍵是在項目的src下面有META-INF這個文件夾,並定義裏面的內容,與WebRoot下META-INF無關。
然後在src下的META-INF建立xfire子文件夾,裏面建立一名叫services.xml配置文件,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>TestService</name>
<namespace>http://com/gdie/xfire/example/ITestService</namespace>
<serviceClass>com.gdie.xfire.example.ITestService</serviceClass>
<implementationClass>com.gdie.xfire.example.TestService</implementationClass>
</service>
</beans>
注意:包文件路徑com.gdie.xfire.example.ITestService等需要正確對應。
關鍵是在src下面要有META-INF文件夾和裏面的文件,否則會報找不到services.xml錯誤而加載不了項目。
4.修改web.xml
配置文件關鍵是定義XFireServlet,對應代碼如下:
<?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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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>
</web-app>
至此,服務器端部署完畢。完整的項目文件結構如圖:
將項目加載進tomcat並啓動tomcat,無異常。
打開ie,輸入
http://localhost:8080/TestXFire/services/
出現
表明部署成功,點wsdl可以看見一堆xml代碼。
5.客戶端測試
先將剛纔建立的TestXFire整個項目打包成jar包(myeclipse的export),名爲TestXFire.jar,再新建一個web項目TestXFireClient,導入xfire的包,和剛纔的TestXFire工程的打包TestXFire.jar
在src下新建一個測試類,代碼如下:
package com.gdie.xfire.test;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import com.gdie.xfire.example.ITestService;;
public class MyClient {
public static void main(String[] args) {
try{
Service serviceModel = new ObjectServiceFactory().create(
ITestService.class,"TestService","http://com/gdie/xfire/example/ITestService",null);
ITestService service = (ITestService) new XFireProxyFactory().create(
serviceModel,"http://localhost:8080/TestXFile/services/TestService");
System.out.println("返回值是:"+service.add(5, 8));
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
運行,輸出結果是:
返回值是:13
則說明客戶端成功。
至此,webservice部署測試例子成功。
【項目創建】
包名 做了一些修改。
這裏只貼出比較關鍵的文件
【src/META-INF/xfire/services.xml】
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>TestService</name>
<namespace>http://com/feihuale/xfire/demo/ITestService</namespace>
<serviceClass>com.feihuale.xfire.demo.ITestService</serviceClass>
<implementationClass>com.feihuale.xfire.demo.TestService</implementationClass>
</service>
</beans>
【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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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>
</web-app>
【客戶端項目文件】
package com.feihuale.xfire.test;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import com.feihuale.xfire.demo.ITestService;
public class MyClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
Service serviceModel = new ObjectServiceFactory().create(
ITestService.class, "TestService",
"http://com/feihuale/xfire/demo/ITestService", null);
ITestService service = (ITestService) new XFireProxyFactory()
.create(serviceModel,
"http://localhost:8080/TestXFire/services/TestService");
System.out.println("返回值是:" + service.add(5, 8));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}