zoukankan      html  css  js  c++  java
  • XFire完整入门教程

    本Blog所有内容不得随意转载,版权属于作者所有。如需转载请与作者联系( fastzch@163.com )。
    未经许可的转载,本人保留一切法律权益。
    一直以来,发现有某些人完全不尊重我的劳动成果,随意转载,提醒一下那些人小心哪天惹上官司。

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

    实例中包括三个情况,我想基本上可以概括所有的需求,或者自己稍加扩展即可。先来看看我们的Interface。

     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的传递。

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

    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}

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

     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   {
     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定义描述文件,如下:

     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的相应目录下面。

    最近有些朋友因使用Spring2.0以上版本时,会发生如下异常:

    ERROR  -  Error initializing XFireServlet.
    org.springframework.beans.factory.BeanDefinitionStoreException: Unrecognized xbean element mapping: beans in namespace http:
    // xfire.codehaus.org/config/1.0

    当出现如下异常时,请将此文件用如下内容替换:

     1 <? xml version="1.0" encoding="UTF-8" ?>
     2 < beans >
     3      < service  xmlns ="http://xfire.codehaus.org/config/1.0"
     4         xmlns:s ="http://www.springframework.org/schema/beans"
     5         xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
     6         xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" >
     7          < name > HelloService </ name >
     8          < namespace > http://test/HelloService </ namespace >
     9          < serviceClass > test.IHelloService </ serviceClass >
    10          < implementationClass > test.HelloServiceImpl </ implementationClass >
    11      </ service >
    12 </ beans >
    13


    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"   />
    6              < return-type  componentType ="test.Course"   />
    7          </ method >
    8      </ mapping >
    9 </ mappings >

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

    5、在Web.xml中配置XFire需要用到的Servlet,代码如下:

     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的服务端就开发完成了。
    我们来看看客户端的代码吧,也很简单,如下:

     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}

    49


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


    关于使用XFire开发Web Service客户端的方法,可以参考我的另一篇文章《 使用XFire开发Web Service客户端完整入门教程》。

  • 相关阅读:
    express开发实例
    node.js操作mongoDB数据库
    Mysql JDBC Url参数说明useUnicode=true&characterEncoding=UTF-8
    Hibernate 使用说明
    mysql 时间戳与日期格式的相互转换
    MOOC即Massive Open Online Course的缩写
    CentOS+Apache+php无法访问redis的解决方法
    CentOS 6.5下Redis安装详细步骤
    Linux进程基础
    CentOS如何查看端口是被哪个应用/进程占用
  • 原文地址:https://www.cnblogs.com/james1207/p/3306366.html
Copyright © 2011-2022 走看看