Chinaunix首页 | 论坛 | 博客
  • 博客访问: 624442
  • 博文数量: 98
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1528
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-28 16:20
文章分类

全部博文(98)

文章存档

2011年(1)

2010年(11)

2009年(44)

2008年(42)

我的朋友

分类: Java

2008-11-14 11:16:53

网上关于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两个类的代码如下:
 1package 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
 1package 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定义描述文件,如下:
 1xml version="1.0" encoding="UTF-8"?>
 2<beans xmlns="">
 3
 4    <service>
 5        <name>HelloServicename>
 6        <namespace>namespace>
 7        <serviceClass>test.IHelloServiceserviceClass>
 8        <implementationClass>test.HelloServiceImplimplementationClass>
 9    service>
10    
11beans>
此文件放在src/META-INF/xfire/services.xml,编译时会自动编译到classes的相应目录下面。

4、因为我们用到了List等集合类型,所以需要定义Mapping关系,文件名为:src/test/IHelloService.aegis.xml,代码如下:
1xml version="1.0" encoding="UTF-8"?>
2<mappings>
3    <mapping>
4        <method name="test">
5            <parameter index="0" componentType="java.lang.String" />
6            <return-type componentType="test.Course" />
7        method>
8    mapping>
9mappings>
请注意,此文件一定要放到与IHelloService.java相同的目录下面,否则会出错。

5、在Web.xml中配置XFire需要用到的Servlet,代码如下:
 1xml version="1.0" encoding="UTF-8"?>
 2<web-app version="2.4" xmlns=""
 3    xmlns:xsi=""
 4    xsi:schemaLocation=" 
 5    /web-app_2_4.xsd">
 6
 7    <servlet>
 8        <servlet-name>XFireServletservlet-name>
 9        <servlet-class>
10            org.codehaus.xfire.transport.http.XFireConfigurableServlet
11        servlet-class>
12    servlet>
13
14    <servlet-mapping>
15        <servlet-name>XFireServletservlet-name>
16        <url-pattern>/servlet/XFireServlet/*url-pattern>
17    servlet-mapping>
18
19    <servlet-mapping>
20        <servlet-name>XFireServletservlet-name>
21        <url-pattern>/services/*url-pattern>
22    servlet-mapping>
23
24
25    <welcome-file-list>
26        <welcome-file>index.jspwelcome-file>
27    welcome-file-list>
28web-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 = "";
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
阅读(421) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~