转载:XFire完整入门教程

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

实例中包括三个情况,我想基本上可以概括所有的需求,或者自己稍加扩展即可。先来看看我们的Interface。
 1None.gifpackage test;
 2None.gif
 3None.gifimport java.util.List;
 4None.gif
 5ExpandedBlockStart.gifpublic interface IHelloService {
 6InBlock.gif    public String sayHello(String ttt);
 7InBlock.gif    
 8InBlock.gif    public Course choose(User u);
 9InBlock.gif    
10InBlock.gif    public List  test(List t);
11ExpandedBlockEnd.gif}
这其中包含了简单对象的传递,对象的传递,List的传递。

具体的开发步骤如下:
1、定义Web Service的接口,代码见上面的接口定义。

2、实现接口和业务逻辑,代码如下:
 1None.gifpackage test;
 2None.gif
 3None.gifimport java.util.ArrayList;
 4None.gifimport java.util.List;
 5None.gif
 6ExpandedBlockStart.gifpublic class HelloServiceImpl implements IHelloService {
 7InBlock.gif
 8ExpandedSubBlockStart.gif    public String sayHello(String ttt) {
 9InBlock.gif        return "Hello, "+ttt;
10ExpandedSubBlockEnd.gif    }

11InBlock.gif    
12ExpandedSubBlockStart.gif    public Course choose(User u){
13InBlock.gif        System.out.println(u.getName());
14InBlock.gif        Course c=new Course();
15InBlock.gif        c.setName("Eee");
16InBlock.gif        return c; 
17InBlock.gif        
18ExpandedSubBlockEnd.gif    }

19InBlock.gif    
20ExpandedSubBlockStart.gif    public List  test(List t){
21ExpandedSubBlockStart.gif        for (int i = 0; i < t.size(); i++{
22InBlock.gif            System.out.println((String) t.get(i));
23ExpandedSubBlockEnd.gif        }

24InBlock.gif        List  al=new ArrayList();
25InBlock.gif        Course c=new Course();
26InBlock.gif        c.setName("EeeDDDDDD");
27InBlock.gif        al.add(c);
28InBlock.gif        return al;
29InBlock.gif        
30ExpandedSubBlockEnd.gif    }

31ExpandedBlockEnd.gif}
用到的User和Course两个类的代码如下:
 1None.gifpackage test;
 2None.gif
 3ExpandedBlockStart.gifpublic class User {
 4InBlock.gif    private String name;
 5InBlock.gif
 6ExpandedSubBlockStart.gif    public String getName() {
 7InBlock.gif        return name;
 8ExpandedSubBlockEnd.gif    }

 9InBlock.gif
10ExpandedSubBlockStart.gif    public void setName(String name) {
11InBlock.gif        this.name = name;
12ExpandedSubBlockEnd.gif    }

13ExpandedBlockEnd.gif}

14None.gif
 1None.gifpackage test;
 2None.gif
 3ExpandedBlockStart.gifpublic class Course  {
 4InBlock.gif    private String name;
 5InBlock.gif
 6ExpandedSubBlockStart.gif    public String getName() {
 7InBlock.gif        return name;
 8ExpandedSubBlockEnd.gif    }

 9InBlock.gif
10ExpandedSubBlockStart.gif    public void setName(String name) {
11InBlock.gif        this.name = name;
12ExpandedSubBlockEnd.gif    }

13InBlock.gif
14ExpandedBlockEnd.gif}

3、编写XFire要求的WebSevice定义描述文件,如下:
 1None.gif<?xml version="1.0" encoding="UTF-8"?>
 2None.gif<beans xmlns="http://xfire.codehaus.org/config/1.0">
 3None.gif
 4None.gif    <service>
 5None.gif        <name>HelloService</name>
 6None.gif        <namespace>http://test/HelloService</namespace>
 7None.gif        <serviceClass>test.IHelloService</serviceClass>
 8None.gif        <implementationClass>test.HelloServiceImpl</implementationClass>
 9None.gif    </service>
10None.gif    
11None.gif</beans>
此文件放在src/META-INF/xfire/services.xml,编译时会自动编译到classes的相应目录下面。

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

5、在Web.xml中配置XFire需要用到的Servlet,代码如下:
 1None.gif<?xml version="1.0" encoding="UTF-8"?>
 2None.gif<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 3None.gif    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4None.gif    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
 5None.gif    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 6None.gif
 7None.gif    <servlet>
 8None.gif        <servlet-name>XFireServlet</servlet-name>
 9None.gif        <servlet-class>
10None.gif            org.codehaus.xfire.transport.http.XFireConfigurableServlet
11None.gif        </servlet-class>
12None.gif    </servlet>
13None.gif
14None.gif    <servlet-mapping>
15None.gif        <servlet-name>XFireServlet</servlet-name>
16None.gif        <url-pattern>/servlet/XFireServlet/*</url-pattern>
17None.gif    </servlet-mapping>
18None.gif
19None.gif    <servlet-mapping>
20None.gif        <servlet-name>XFireServlet</servlet-name>
21None.gif        <url-pattern>/services/*</url-pattern>
22None.gif    </servlet-mapping>
23None.gif
24None.gif
25None.gif    <welcome-file-list>
26None.gif        <welcome-file>index.jsp</welcome-file>
27None.gif    </welcome-file-list>
28None.gif</web-app>


此时Web Service的服务端就开发完成了。
我们来看看客户端的代码吧,也很简单,如下:
 1None.gifpackage test;
 2None.gif
 3None.gifimport java.net.MalformedURLException;
 4None.gifimport java.util.ArrayList;
 5None.gifimport java.util.List;
 6None.gif
 7None.gifimport org.codehaus.xfire.XFireFactory;
 8None.gifimport org.codehaus.xfire.client.XFireProxyFactory;
 9None.gifimport org.codehaus.xfire.service.Service;
10None.gifimport org.codehaus.xfire.service.binding.ObjectServiceFactory;
11None.gif
12ExpandedBlockStart.gifpublic class Client {
13InBlock.gif
14ExpandedSubBlockStart.gif    public static void main(String[] args) {
15InBlock.gif
16InBlock.gif        Service srvcModel = new ObjectServiceFactory()
17InBlock.gif                .create(IHelloService.class);
18InBlock.gif        XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
19InBlock.gif                .newInstance().getXFire());
20InBlock.gif
21InBlock.gif        String helloWorldURL = "http://localhost:8080/xfiretest/services/HelloService";
22ExpandedSubBlockStart.gif        try {
23InBlock.gif            IHelloService srvc = (IHelloService) factory.create(srvcModel,
24InBlock.gif                    helloWorldURL);
25InBlock.gif            System.out.println(srvc.sayHello("Robin"));
26InBlock.gif            
27InBlock.gif            User u=new User();
28InBlock.gif            u.setName("RRRRR");
29InBlock.gif            Course c=srvc.choose(u);
30InBlock.gif            System.out.println(c.getName());
31InBlock.gif            
32InBlock.gif            List  al=new ArrayList();
33InBlock.gif            al.add("1212");
34InBlock.gif            al.add("2222");
35InBlock.gif            List t=srvc.test(al);
36ExpandedSubBlockStart.gif            for (int i = 0; i < t.size(); i++{
37InBlock.gif                Course co=(Course)t.get(i);
38InBlock.gif                System.out.println(co.getName());
39ExpandedSubBlockEnd.gif            }

40InBlock.gif            
41InBlock.gif            
42ExpandedSubBlockStart.gif        }
 catch (MalformedURLException e) {
43InBlock.gif            e.printStackTrace();
44ExpandedSubBlockEnd.gif        }

45InBlock.gif
46ExpandedSubBlockEnd.gif    }

47InBlock.gif
48ExpandedBlockEnd.gif}

49None.gif
展开阅读全文

没有更多推荐了,返回首页