​XFire完整入门教程​


网上关于XFire入门的教程不少,要么是讲得很简单,就像Hello World一样的程序,要么就是通过IDE集成的工具来开发的,这对于不同的人群有诸多不便,关于XFire的一些详细的信息就不再多讲,可以参考官方网站和相关的文档,这里讲一个完整的入门实例。


实例中包括三个情况,我想基本上可以概括所有的需求,或者自己稍加扩展即可。先来看看我们的Interface。


 1 XFire完整入门教程_客户端package  test;

 2 XFire完整入门教程_客户端

 3 XFire完整入门教程_客户端 import  java.util.List;

 4 XFire完整入门教程_客户端

 5 XFire完整入门教程_i++_05 public   interface  IHelloService  {

 6 XFire完整入门教程_i++_06     public  String sayHello(String ttt);

 7 XFire完整入门教程_i++_06    

 8 XFire完整入门教程_i++_06     public  Course choose(User u);

 9 XFire完整入门教程_i++_06    

10 XFire完整入门教程_i++_06     public  List  test(List t);

11 XFire完整入门教程_i++_11}


这其中包含了简单对象的传递,对象的传递,List的传递。


具体的开发步骤如下:

1、定义Web Service的接口,代码见上面的接口定义。


2、实现接口和业务逻辑,代码如下:


 1 XFire完整入门教程_客户端package  test;

 2 XFire完整入门教程_客户端

 3 XFire完整入门教程_客户端 import  java.util.ArrayList;

 4 XFire完整入门教程_客户端 import  java.util.List;

 5 XFire完整入门教程_客户端

 6 XFire完整入门教程_i++_05 public   class  HelloServiceImpl  implements  IHelloService  {

 7XFire完整入门教程_i++_06

 8XFire完整入门教程_java_19    public String sayHello(String ttt) {

 9XFire完整入门教程_i++_06        return "Hello, "+ttt;

10XFire完整入门教程_java_21    }

11XFire完整入门教程_i++_06    

12XFire完整入门教程_java_19    public Course choose(User u){

13XFire完整入门教程_i++_06        System.out.println(u.getName());

14XFire完整入门教程_i++_06        Course c=new Course();

15XFire完整入门教程_i++_06        c.setName("Eee");

16XFire完整入门教程_i++_06        return c; 

17XFire完整入门教程_i++_06        

18XFire完整入门教程_java_21    }

19XFire完整入门教程_i++_06    

20XFire完整入门教程_java_19    public List  test(List t){

21XFire完整入门教程_java_19        for (int i = 0; i < t.size(); i++) {

22XFire完整入门教程_i++_06            System.out.println((String) t.get(i));

23XFire完整入门教程_java_21        }

24XFire完整入门教程_i++_06        List  al=new ArrayList();

25XFire完整入门教程_i++_06        Course c=new Course();

26XFire完整入门教程_i++_06        c.setName("EeeDDDDDD");

27XFire完整入门教程_i++_06        al.add(c);

28XFire完整入门教程_i++_06        return al;

29XFire完整入门教程_i++_06        

30XFire完整入门教程_java_21    }

31XFire完整入门教程_i++_11}


用到的User和Course两个类的代码如下:


 1 XFire完整入门教程_客户端package  test;

 2 XFire完整入门教程_客户端

 3 XFire完整入门教程_i++_05 public   class  User  {

 4XFire完整入门教程_i++_06    private String name;

 5XFire完整入门教程_i++_06

 6XFire完整入门教程_java_19    public String getName() {

 7XFire完整入门教程_i++_06        return name;

 8XFire完整入门教程_java_21    }

 9XFire完整入门教程_i++_06

10XFire完整入门教程_java_19    public void setName(String name) {

11XFire完整入门教程_i++_06        this.name = name;

12XFire完整入门教程_java_21    }

13XFire完整入门教程_i++_11}

14 XFire完整入门教程_客户端


 1 XFire完整入门教程_客户端package  test;

 2 XFire完整入门教程_客户端

 3 XFire完整入门教程_i++_05 public   class  Course   {

 4XFire完整入门教程_i++_06    private String name;

 5XFire完整入门教程_i++_06

 6XFire完整入门教程_java_19    public String getName() {

 7XFire完整入门教程_i++_06        return name;

 8XFire完整入门教程_java_21    }

 9XFire完整入门教程_i++_06

10XFire完整入门教程_java_19    public void setName(String name) {

11XFire完整入门教程_i++_06        this.name = name;

12XFire完整入门教程_java_21    }

13XFire完整入门教程_i++_06

14XFire完整入门教程_i++_11}


3、编写XFire要求的WebSevice定义描述文件,如下:


 1 XFire完整入门教程_客户端<? xml version="1.0" encoding="UTF-8" ?>

 2 XFire完整入门教程_客户端 < beans  xmlns ="http://xfire.codehaus.org/config/1.0" >

 3 XFire完整入门教程_客户端

 4 XFire完整入门教程_客户端     < service >

 5 XFire完整入门教程_客户端         < name > HelloService </ name >

 6 XFire完整入门教程_客户端         < namespace > http://test/HelloService </ namespace >

 7 XFire完整入门教程_客户端         < serviceClass > test.IHelloService </ serviceClass >

 8 XFire完整入门教程_客户端         < implementationClass > test.HelloServiceImpl </ implementationClass >

 9 XFire完整入门教程_客户端     </ service >

10 XFire完整入门教程_客户端    

11 XFire完整入门教程_客户端 </ beans >


此文件放在src/META-INF/xfire/services.xml,编译时会自动编译到classes的相应目录下面。


最近有些朋友因使用Spring2.0以上版本时,会发生如下异常:


XFire完整入门教程_客户端ERROR  -  Error initializing XFireServlet.

XFire完整入门教程_客户端org.springframework.beans.factory.BeanDefinitionStoreException: Unrecognized xbean element mapping: beans in namespace http: // xfire.codehaus.org/config/1.0

XFire完整入门教程_客户端


当出现如下异常时,请将此文件用如下内容替换:


 1 XFire完整入门教程_客户端<? xml version="1.0" encoding="UTF-8" ?>

 2 XFire完整入门教程_客户端 < beans >

 3 XFire完整入门教程_客户端     < service  xmlns ="http://xfire.codehaus.org/config/1.0"

 4 XFire完整入门教程_客户端        xmlns:s ="http://www.springframework.org/schema/beans"

 5 XFire完整入门教程_客户端        xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

 6 XFire完整入门教程_客户端        xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" >

 7 XFire完整入门教程_客户端         < name > HelloService </ name >

 8 XFire完整入门教程_客户端         < namespace > http://test/HelloService </ namespace >

 9 XFire完整入门教程_客户端         < serviceClass > test.IHelloService </ serviceClass >

10 XFire完整入门教程_客户端         < implementationClass > test.HelloServiceImpl </ implementationClass >

11 XFire完整入门教程_客户端     </ service >

12 XFire完整入门教程_客户端 </ beans >

13 XFire完整入门教程_客户端


4、因为我们用到了List等集合类型,所以需要定义Mapping关系,文件名为:src/test/IHelloService.aegis.xml,代码如下:


1 XFire完整入门教程_客户端<? xml version="1.0" encoding="UTF-8" ?>

2 XFire完整入门教程_客户端 < mappings >

3 XFire完整入门教程_客户端     < mapping >

4 XFire完整入门教程_客户端         < method  name ="test" >

5 XFire完整入门教程_客户端             < parameter  index ="0"  componentType ="java.lang.String"   />

6 XFire完整入门教程_客户端             < return-type  componentType ="test.Course"   />

7 XFire完整入门教程_客户端         </ method >

8 XFire完整入门教程_客户端     </ mapping >

9 XFire完整入门教程_客户端 </ mappings >


请注意,此文件一定要放到与IHelloService.java相同的目录下面,否则会出错。


5、在Web.xml中配置XFire需要用到的Servlet,代码如下:


 1 XFire完整入门教程_客户端<? xml version="1.0" encoding="UTF-8" ?>

 2 XFire完整入门教程_客户端 < web-app  version ="2.4"  xmlns ="http://java.sun.com/xml/ns/j2ee"

 3 XFire完整入门教程_客户端    xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

 4 XFire完整入门教程_客户端    xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee 

 5 XFire完整入门教程_客户端    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

 6 XFire完整入门教程_客户端

 7 XFire完整入门教程_客户端     < servlet >

 8 XFire完整入门教程_客户端         < servlet-name > XFireServlet </ servlet-name >

 9 XFire完整入门教程_客户端         < servlet-class >

10 XFire完整入门教程_客户端            org.codehaus.xfire.transport.http.XFireConfigurableServlet

11 XFire完整入门教程_客户端         </ servlet-class >

12 XFire完整入门教程_客户端     </ servlet >

13 XFire完整入门教程_客户端

14 XFire完整入门教程_客户端     < servlet-mapping >

15 XFire完整入门教程_客户端         < servlet-name > XFireServlet </ servlet-name >

16 XFire完整入门教程_客户端         < url-pattern > /servlet/XFireServlet/* </ url-pattern >

17 XFire完整入门教程_客户端     </ servlet-mapping >

18 XFire完整入门教程_客户端

19 XFire完整入门教程_客户端     < servlet-mapping >

20 XFire完整入门教程_客户端         < servlet-name > XFireServlet </ servlet-name >

21 XFire完整入门教程_客户端         < url-pattern > /services/* </ url-pattern >

22 XFire完整入门教程_客户端     </ servlet-mapping >

23 XFire完整入门教程_客户端

24 XFire完整入门教程_客户端

25 XFire完整入门教程_客户端     < welcome-file-list >

26 XFire完整入门教程_客户端         < welcome-file > index.jsp </ welcome-file >

27 XFire完整入门教程_客户端     </ welcome-file-list >

28 XFire完整入门教程_客户端 </ web-app >



此时Web Service的服务端就开发完成了。

我们来看看客户端的代码吧,也很简单,如下:


 1 XFire完整入门教程_客户端package  test;

 2 XFire完整入门教程_客户端

 3 XFire完整入门教程_客户端 import  java.net.MalformedURLException;

 4 XFire完整入门教程_客户端 import  java.util.ArrayList;

 5 XFire完整入门教程_客户端 import  java.util.List;

 6 XFire完整入门教程_客户端

 7 XFire完整入门教程_客户端 import  org.codehaus.xfire.XFireFactory;

 8 XFire完整入门教程_客户端 import  org.codehaus.xfire.client.XFireProxyFactory;

 9 XFire完整入门教程_客户端 import  org.codehaus.xfire.service.Service;

10 XFire完整入门教程_客户端 import  org.codehaus.xfire.service.binding.ObjectServiceFactory;

11 XFire完整入门教程_客户端

12 XFire完整入门教程_i++_05 public   class  Client  {

13XFire完整入门教程_i++_06

14XFire完整入门教程_java_19    public static void main(String[] args) {

15XFire完整入门教程_i++_06

16XFire完整入门教程_i++_06        Service srvcModel = new ObjectServiceFactory()

17XFire完整入门教程_i++_06                .create(IHelloService.class);

18XFire完整入门教程_i++_06        XFireProxyFactory factory = new XFireProxyFactory(XFireFactory

19XFire完整入门教程_i++_06                .newInstance().getXFire());

20XFire完整入门教程_i++_06

21XFire完整入门教程_i++_06        String helloWorldURL = "http://localhost:8080/xfiretest/services/HelloService";

22XFire完整入门教程_java_19        try {

23XFire完整入门教程_i++_06            IHelloService srvc = (IHelloService) factory.create(srvcModel,

24XFire完整入门教程_i++_06                    helloWorldURL);

25XFire完整入门教程_i++_06            System.out.println(srvc.sayHello("Robin"));

26XFire完整入门教程_i++_06            

27XFire完整入门教程_i++_06            User u=new User();

28XFire完整入门教程_i++_06            u.setName("RRRRR");

29XFire完整入门教程_i++_06            Course c=srvc.choose(u);

30XFire完整入门教程_i++_06            System.out.println(c.getName());

31XFire完整入门教程_i++_06            

32XFire完整入门教程_i++_06            List  al=new ArrayList();

33XFire完整入门教程_i++_06            al.add("1212");

34XFire完整入门教程_i++_06            al.add("2222");

35XFire完整入门教程_i++_06            List t=srvc.test(al);

36XFire完整入门教程_java_19            for (int i = 0; i < t.size(); i++) {

37XFire完整入门教程_i++_06                Course co=(Course)t.get(i);

38XFire完整入门教程_i++_06                System.out.println(co.getName());

39XFire完整入门教程_java_21            }

40XFire完整入门教程_i++_06            

41XFire完整入门教程_i++_06            

42XFire完整入门教程_java_19        } catch (MalformedURLException e) {

43XFire完整入门教程_i++_06            e.printStackTrace();

44XFire完整入门教程_java_21        }

45XFire完整入门教程_i++_06

46XFire完整入门教程_java_21    }

47XFire完整入门教程_i++_06

48XFire完整入门教程_i++_11}

49 XFire完整入门教程_客户端


以上代码均无注释,因为都非常简单,呵呵。如有不清楚的地方,请留言!



关于使用XFire开发Web Service客户端的方法,可以参考我的另一篇文章《 ​ ​使用XFire开发Web Service客户端完整入门教程​​》。