XFire完整入门教程

网上关于XFire入门的教程不少,要么是讲得很简单,就像Hello World一样的程序,要么就是通过IDE集成的工具来开发的,这对于不同的人群有诸多不便,关于XFire的一些详细的信息就不再多讲,可以参考官方网站和相关的文档,这里讲一个完整的入门实例。
实例中包括三个情况,我想基本上可以概括所有的需求,或者自己稍加扩展即可。先来看看我们的Interface。

  1package test;
  2 
  3import java.util.List;
  4
  5public interface IHelloService {
  6    public String sayHello(String ttt);
  7    
  8    public Course choose(User u);
  9   
  10    public List  test(List t);
  11}

这其中包含了简单对象的传递,对象的传递,List的传递。
具体的开发步骤如下: 1、定义Web Service的接口,代码见上面的接口定义。
2、实现接口和业务逻辑,代码如下:

  1package test;
  2 
  3import java.util.ArrayList;
  4import java.util.List;
  5
  6public class HelloServiceImpl implements IHelloService {
  7 
  8    public String sayHello(String ttt) { 
  9        return "Hello, "+ttt;
  10    }
  11    
  12    public Course choose(User u){
  13        System.out.println(u.getName());
  14        Course c=new Course();
  15        c.setName("Eee");
  16        return c; 
  17        
  18    }
  19   
  20    public List  test(List t){
  21        for (int i = 0; i < t.size(); i++) {
  22            System.out.println((String) t.get(i));
  23        }
  24        List  al=new ArrayList();
  25        Course c=new Course();
  26        c.setName("EeeDDDDDD");
  27        al.add(c);
  28        return al;
  29        
  30    }
  31}

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

 package test;
 2
 3public class User {
 4    private String name;
 5
 6    public String getName() {
 7        return name;
 8    }
 9
10    public void setName(String name) {
11        this.name = name;
12    }
13}
14
 package test;
 2
 3public class Course  {
 4    private String name;
 5
 6    public String getName() {
 7        return name;
 8    }
 9
10    public void setName(String name) {
11        this.name = name;
12    }
13
14}

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

 <?xml version="1.0" encoding="UTF-8"?>
 2<beans xmlns="http://xfire.codehaus.org/config/1.0">
 3
 4    <service>
 5        <name>HelloService</name>
 6        <namespace>http://test/HelloService</namespace>
 7        <serviceClass>test.IHelloService</serviceClass>
 8        <implementationClass>test.HelloServiceImpl</implementationClass>
 9    </service>
10    
11</beans>

此文件放在src/META-INF/xfire/services.xml,编译时会自动编译到classes的相应目录下面。
4、因为我们用到了List等集合类型,所以需要定义Mapping关系,文件名为:src/test/IHelloService.aegis.xml,代码如下:

1<?xml version="1.0" encoding="UTF-8"?>
2<mappings>
3    <mapping>
4        <method name="test">-----接口中方法名
5            <parameter index="0" componentType="java.lang.String" />-----接受的参数类型,index--第几个参数
6            <return-type componentType="test.Course" />-----List内对象的完整类名
7        </method>
8    </mapping>
9</mappings>

请注意,此文件一定要放到与IHelloService.java相同的目录下面,否则会出错。
5、在Web.xml中配置XFire需要用到的Servlet,代码如下:

 <?xml version="1.0" encoding="UTF-8"?>
 2<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 3    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
 5    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 6
 7    <servlet>
 8        <servlet-name>XFireServlet</servlet-name>
 9        <servlet-class>
10            org.codehaus.xfire.transport.http.XFireConfigurableServlet
11        </servlet-class>
12    </servlet>
13
14    <servlet-mapping>
15        <servlet-name>XFireServlet</servlet-name>
16        <url-pattern>/servlet/XFireServlet/*</url-pattern>
17    </servlet-mapping>
18
19    <servlet-mapping>
20        <servlet-name>XFireServlet</servlet-name>
21        <url-pattern>/services/*</url-pattern>
22    </servlet-mapping>
23
24
25    <welcome-file-list>
26        <welcome-file>index.jsp</welcome-file>
27    </welcome-file-list>
28</web-app>

此时Web Service的服务端就开发完成了。 我们来看看客户端的代码吧,也很简单,如下:

  1package test;
 2
 3import java.net.MalformedURLException;
 4import java.util.ArrayList;
 5import java.util.List;
 6
 7import org.codehaus.xfire.XFireFactory;
 8import org.codehaus.xfire.client.XFireProxyFactory;
 9import org.codehaus.xfire.service.Service;
10import org.codehaus.xfire.service.binding.ObjectServiceFactory;
11
12public class Client {
13
14    public static void main(String[] args) {
15
16        Service srvcModel new ObjectServiceFactory()
17                .create(IHelloService.class);
18        XFireProxyFactory factory new XFireProxyFactory(XFireFactory
19                .newInstance().getXFire());
20
21        String helloWorldURL "http://localhost:8080/xfiretest/services/HelloService";
22        try {
23            IHelloService srvc = (IHelloService) factory.create(srvcModel,
24                    helloWorldURL);
25            System.out.println(srvc.sayHello("Robin"));
26            
27            User u=new User();
28            u.setName("RRRRR");
29            Course c=srvc.choose(u);
30            System.out.println(c.getName());
31            
32            List  al=new ArrayList();
33            al.add("1212");
34            al.add("2222");
35            List t=srvc.test(al);
36            for (int i 0; i < t.size(); i++{
37                Course co=(Course)t.get(i);
38                System.out.println(co.getName());
39            }
40            
41            
42        } catch (MalformedURLException e) {
43            e.printStackTrace();
44        }
45
46    }
47
48}
49

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

原文地址:https://www.cnblogs.com/liutt1989/p/5282591.html