關(guān)于XFire的集合映射:這里使用了JDK5.0提供的 新特性中的泛型機制 ,所以不需要<InterfaceName>.aegis.xml 文件

                              如果您使用的是JDK4 ,那么就需要配置<InterfaceName>.aegis.xml 文件,相關(guān)資料請找Google老師
交待一下我的開發(fā)環(huán)境:MyEclipse6.5 Tomcat-6.0.10 JDK1.5.0_08 XFire-1.2.6 
如果對WebServics還不是很了解,請參閱我之前寫過的一篇文章——What is WebServices 
MyEclipse6.5自身便提供了對XFire的支持,所以我們可以直接創(chuàng)建一個Web Service Project 
創(chuàng)建步驟——略。網(wǎng)上有很多,希望勤快的您能夠自行查閱
下面展示的是WebServices服務(wù)端的全部代碼 代碼已親測,全部通過 
其中包含了使用XFire處理簡單對象的傳遞、對象的傳遞、List的傳遞

 

首先是web.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  5.     <servlet>  
  6.         <servlet-name>XFireServlet</servlet-name>  
  7.         <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>  
  8.     </servlet>  
  9.     <servlet-mapping>  
  10.         <servlet-name>XFireServlet</servlet-name>  
  11.         <url-pattern>/services/*</url-pattern>  
  12.     </servlet-mapping>  
  13. </web-app>  
  14. <!-- XFireServlet攔截了所有關(guān)于/services/*的請求,即只在這個URI下開放WebService服務(wù) -->  
  15. <!-- 所以對外系統(tǒng)開放的SebService的URL基本上都是【http://127.0.0.1:端口/項目/services/服務(wù)名】的形式 -->  
  16. <!-- 當(dāng)我們將該WebService項目部署到Tomcat上之后,打開瀏覽器,然后輸入http://127.0.0.1:8080/XFire_demo/services/XFireServer?wsdl -->  
  17. <!-- 其中XFireServer是services.xml中<service>標簽的<name>元素所定義的內(nèi)容,而問號后面的wsdl參數(shù)表示查看該Web服務(wù)的WSDL(Web服務(wù)描述語言)文件 -->  

 

然后是services.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!-- 該文件用于將我們寫的一般的Java類暴露成WebService -->  
  3. <!-- This file should be placed in your classpath at "META-INF/xfire/services.xml" -->  
  4. <!-- 這是XFire官網(wǎng)上說的,即services.xml文件需要保存在classpath下面的/META-INF/xfire/目錄中 -->  
  5. <!-- 但MyEclipse卻在項目中建立了一個WebService文件夾來保存services.xml文件 -->  
  6. <!-- 其實MyEclipse已幫我們映射好了位置,它會自動將該文件存放在WEB-INF/classes/META-INF/xfire/目錄下 -->  
  7. <beans xmlns="http://xfire.codehaus.org/config/1.0">  
  8.     <!-- service標簽和它所包含的XML內(nèi)容為發(fā)布成Web服務(wù)的POJO提供完整的描述 -->  
  9.     <!-- ★★注意★★在使用XFire與Spring2.0集成時,正常情況下,控制臺會報告異常 -->  
  10.     <!-- ★★注意★★此時把xmlns="http://xfire.codehaus.org/config/1.0"寫到<service>標簽里面,即可 -->  
  11.     <!-- ★★注意★★<beans><service xmlns="http://xfire.codehaus.org/config/1.0">...<servcie><beans> -->  
  12.     <service>  
  13.         <!-- Web服務(wù)被發(fā)布時所采用的唯一名稱,即我們的WebServices服務(wù)對外提供的名字 -->  
  14.         <!-- 該名字可以是任何的合法名字,它將會被客戶端程序和其它需要調(diào)用我們的服務(wù)的組件用到 -->  
  15.         <!-- 并且,服務(wù)準備好(比如發(fā)布到Tomcat上)以后,可以在瀏覽器中使用該名字來查看WSDL -->  
  16.         <!-- The name element is required -->  
  17.         <name>XFireServer</name>  
  18.           
  19.         <!-- Web服務(wù)發(fā)布時所使用的命名空間 -->  
  20.         <!-- The namespace element is optional -->  
  21.         <namespace>http://www.jadyer.com/XFireDemo</namespace>  
  22.           
  23.         <!-- 指定所要提供WebServices服務(wù)的Java類的名字,包括包名和類名 -->  
  24.         <!-- 這里我們指定的是HelloService接口 -->  
  25.         <!-- 如果我們的Java類沒有實現(xiàn)任何接口,那么這里就可以直接指定Java類的名字 -->  
  26.         <!-- The serviceClass element is required -->  
  27.         <serviceClass>com.jadyer.server.HelloService</serviceClass>  
  28.           
  29.         <!-- 指定當(dāng)WebServices服務(wù)被調(diào)用時,服務(wù)端用來處理請求的接口的Java實現(xiàn)類,包括包名和類名 -->  
  30.         <!-- 這是一個可選元素,如果<serviceClass>指定的是一個接口,那么就必須在這里指定相應(yīng)的實現(xiàn)類 -->  
  31.         <!-- The implementationClass element is optional -->  
  32.         <implementationClass>com.jadyer.server.HelloServiceImpl</implementationClass>  
  33.     </service>  
  34. </beans>  

 

接著是暴露成Web服務(wù)的接口類

  1. package com.jadyer.server;  
  2. import java.util.List;  
  3. import com.jadyer.model.Person;  
  4. import com.jadyer.model.User;  
  5. /** 
  6.  * 暴露成web服務(wù)的接口類 
  7.  */  
  8. public interface HelloService {  
  9.     public String sayHello(String name); //簡單對象的傳遞  
  10.     public Person getPerson(User u); //對象的傳遞  
  11.     public List<Person> getPersonList(Integer age, String name); //List的傳遞  
  12. }  

 

然后是暴露成Web服務(wù)的接口的實現(xiàn)類

  1. package com.jadyer.server;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import com.jadyer.model.Person;  
  5. import com.jadyer.model.User;  
  6. /** 
  7.  * 暴露成web服務(wù)的接口的實現(xiàn)類 
  8.  * @see 該類必須顯式或隱式的提供一個public的無參的【即默認的】構(gòu)造函數(shù) 
  9.  * @see 否則XFire將無法初始化該類 
  10.  */  
  11. public class HelloServiceImpl implements HelloService {  
  12.       
  13.     //Default constructor  
  14.     public HelloServiceImpl(){}  
  15.     public String sayHello(String name) {  
  16.         if(null==name){  
  17.             return "Hello,World";  
  18.         }else{  
  19.             return "Hello," + name;  
  20.         }  
  21.     }  
  22.     public Person getPerson(User u) {  
  23.         Person p = new Person();  
  24.         p.setAge(24);  
  25.         p.setName(u.getName());  
  26.         return p;  
  27.     }  
  28.     public List<Person> getPersonList(Integer age, String name) {  
  29.         Person p = new Person();  
  30.         p.setAge(age);  
  31.         p.setName(name);  
  32.         List<Person> list = new ArrayList<Person>();  
  33.         list.add(p);  
  34.         return list;  
  35.     }  
  36. }  

 

最后再把兩個POJO類補充上

  1. package com.jadyer.model;  
  2. public class User {  
  3.     private String name;  
  4.     /*-- getter和setter略 --*/  
  5. }  
  6. /** 
  7.  * 兩個POJO類 
  8.  */  
  9. package com.jadyer.model;  
  10. public class Person {  
  11.     private Integer age;  
  12.     private String name;  
  13.     /*-- getter和setter略 --*/  
  14. }