XFire完整入门教程

时间:2025-02-03 21:34:08

网上关于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;
 2XFire完整入门教程
 3XFire完整入门教程XFire完整入门教程public class User {
 4XFire完整入门教程    private String name;
 5XFire完整入门教程
 6XFire完整入门教程XFire完整入门教程    public String getName() {
 7XFire完整入门教程        return name;
 8XFire完整入门教程    }
 9XFire完整入门教程
10XFire完整入门教程XFire完整入门教程    public void setName(String name) {
11XFire完整入门教程        this.name = name;
12XFire完整入门教程    }
13XFire完整入门教程}
14XFire完整入门教程
 package test;
 2XFire完整入门教程
 3XFire完整入门教程XFire完整入门教程public class Course  {
 4XFire完整入门教程    private String name;
 5XFire完整入门教程
 6XFire完整入门教程XFire完整入门教程    public String getName() {
 7XFire完整入门教程        return name;
 8XFire完整入门教程    }
 9XFire完整入门教程
10XFire完整入门教程XFire完整入门教程    public void setName(String name) {
11XFire完整入门教程        this.name = name;
12XFire完整入门教程    }
13XFire完整入门教程
14XFire完整入门教程}

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

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

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

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

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

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

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

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

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