XFire入门教程(整理后的)

XFire入门教程

XFire 框架中,我们有两种方式将 POJO 发布成 Web 服务:

  • 一种方式是直接使用 Web 服务接口和 Web 服务实现类(POJO)来发布;
  • 另一种方式是基于 JSR181 标准和注释技术将被注释的 POJO 发布成 Web 服务;

我们这次将采用第一种方式,并利用aegis进行绑定,将XML映射成POJO

1.    首先,我们在eclipse中建立一个xfiretest工程作为服务端,定义Web Service的接口

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

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


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

 1 package test;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 public 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 }

 

 

用到的UserCourse两个类的代码如下:

 1 package test;
 2
 3 public 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

 1 package test;
 2
 3 public class Course   {

Public 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 }

注意,这个javabean里必须要有一个默认没有参数的构造方法,否则在进行aegis绑定会有不能实例化对象的异常

 

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

 1 <?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,其名字必须与web service的名字一致,而且要和其放在同一个包下,后缀是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" />
6             <return-type componentType="test.Course" />
7         </method>
8     </mapping>
9 </mappings>

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

 

其中,method代表需要配置的方法名,由于XFire可以支持基本类型,针对集合类型时,需要配置,返回类型或参数类型为基本类型时不需要特殊配置。
<return-type/>
为配置返回类型,componentType属性代表返回的集合中所包含的类,此类可以是自定义的对象,也可以是基本类型,例如java.lang.String
index="0"代表方法的参数的序号,0即第一个参数。
componentType
代表集合参数内包含的类型,也可以为自定义对象,例如User
注意,如果有两个参数,一个比如为String,一个为集合,那么只需要配置集合参数即可。

比如还是上面的接口,第一个方法
 public Course choose(User u)
此时,返回类型为Course
如果Course中仅为基本类型,例如Stringint等基本类型,无需配置Course

但如果User中还包含有其他类型,比如包含有SetList,那么需要对其进行配置


5
、在Web.xml中配置XFire需要用到的ServletxFire发布文件

代码如下:

 1 <?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的服务端就开发完成了。

部署到tomcat中,在浏览器中运行http://localhost:8080/xfiretest/services/HelloService?wsdl

如果部署正确,讲出现XFire生成的wsdl文件


我们来看看客户端的代码吧(客户端代码编写有几种不同的方式),也很简单,如下:

 1 package test;
 2
 3 import java.net.MalformedURLException;
 4 import java.util.ArrayList;
 5 import java.util.List;
 6
 7 import org.codehaus.xfire.XFireFactory;
 8 import org.codehaus.xfire.client.XFireProxyFactory;
 9 import org.codehaus.xfire.service.Service;
10 import org.codehaus.xfire.service.binding.ObjectServiceFactory;
11
12 public 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 }

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值