XFire完整入门教程

http://wenku.baidu.com/view/7979370116fc700abb68fc42.html

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


  package  test;
   
  import  java.util.List;
  
   public   interface  IHelloService  

 {
       public  String sayHello(String ttt);
      
       public  Course choose(User u);
      
      public  List  test(List t);
 }

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

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

2、实现接口和业务逻辑,代码如下:
 package test;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class HelloServiceImpl implements IHelloService {
 
    public String sayHello(String ttt) {
         return "Hello, "+ttt;
    }
    
    public Course choose(User u){
        System.out.println(u.getName());
        Course c=new Course();
       c.setName("Eee");
        return c; 
        
    }
        public List  test(List t){
        for (int i = 0; i < t.size(); i++) {
           System.out.println((String) t.get(i));
       }
       List  al=new ArrayList();
        Course c=new Course();
        c.setName("EeeDDDDDD");
        al.add(c);
        return al;
        
    }
}

用到的User和Course两个类的代码如下:
 package test;
 
 public class User {
     private String name;
 
     public String getName() {
         return name;
     }
 
    public void setName(String name) {
        this.name = name;
    }
}
 package test;
 
 public class Course  {
     private String name;
 
     public String getName() {
         return name;
     }
 
    public void setName(String name) {
        this.name = name;
    }

}


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

4、因为我们用到了List等集合类型,所以需要定义Mapping关系,文件名为:src/test/IHelloService.aegis.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
    <mapping>
       <method name="test">
            <parameter index="0" componentType="java.lang.String" />
            <return-type componentType="test.Course" />
        </method>
    </mapping>
</mappings>

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

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


 <?xml version="1.0" encoding="UTF-8"?>
 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
     <servlet>
         <servlet-name>XFireServlet</servlet-name>
         <servlet-class>
            org.codehaus.xfire.transport.http.XFireConfigurableServlet
        </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/servlet/XFireServlet/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>


    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

此时Web Service的服务端就开发完成了。
我们来看看客户端的代码吧,也很简单,如下:
 package test;
 
 import java.net.MalformedURLException;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.codehaus.xfire.XFireFactory;
 import org.codehaus.xfire.client.XFireProxyFactory;
 import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public class Client {

    public static void main(String[] args) {

       Service srvcModel = new ObjectServiceFactory()
                .create(IHelloService.class);
        XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
                .newInstance().getXFire());

        String helloWorldURL = "http://localhost:8080/xfiretest/services/HelloService";
        try {
            IHelloService srvc = (IHelloService) factory.create(srvcModel,
                    helloWorldURL);
            System.out.println(srvc.sayHello("Robin"));
            
            User u=new User();
            u.setName("RRRRR");
            Course c=srvc.choose(u);
            System.out.println(c.getName());
            
            List  al=new ArrayList();
            al.add("1212");
            al.add("2222");
            List t=srvc.test(al);
            for (int i = 0; i < t.size(); i++) {
                Course co=(Course)t.get(i);
                System.out.println(co.getName());
            }
            
            
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

网上关于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、实现接口和业务逻辑,代码如下:

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

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

 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 = "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概述:

  XFire是codeHaus组织提供的一个开源框架,它构建了POJOSOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,这种处理方式不仅充分发挥了POJO的作用,简化了Java应用转化为Web服务的步骤和过程,也直接降低了SOA的实现难度,为企业转向SOA架构提供了一种简单可行的方式。

编辑本段目前支持的特性主要包括:

支持

  支持将Web服务绑定到POJO、XMLBeans、JAXB1.1、JAXB2.0和Castor;

  支持基于HTTP、JMS、XMPP等多种协议访问Web服务;

  支持多种Web服务业界重要标准如SOAP、WSDL、Web服务寻址(WS-Addressing)、Web服务安全(WS-Security)等;

  支持JSR181,可以通过JDK5配置Web服务;

  高性能的SOAP实现;

  服务器端、客户端代码辅助生成;

  对Spring、Pico、Plexus等项目的支持等。

目录

  · XFire安装包:

  · XFire框架支撑环境:

  · XFire应用配置:

  · 参考资料:

  · XFire安装包:

  · XFire框架支撑环境:

  · XFire应用配置:

参考资料

  XFire - XFire安装包:XFire框架目前的最新版本是1.2.6,可以访问xfire.codehaus.org下载XFire框架的安装包,下载时请选择“全部二进制发布包(BinaryDistributioninzippackage)”,而不仅仅是“XFirejar文件(JarofallXFiremodules)”。

  下载完成后,我们可以将下载的.zip文件解压缩到任意的文件夹中(后面的章节中使用%XFIRE_HOME%表示XFire框架的安装目录),

编辑本段解压缩后形成的文件目录结构如下:

api目录

  api目录中是XFire框架中所有类(class)对应的API文档,

  

xfire目录结构

为开发者使用XFire完成应用开发提供帮助。

examples目录

  examples目录中包含了所有随XFire二进制包发布的实例,包括这些实例的源代码和相关Web应用配置内容。

lib目录

  lib目录中包含XFire运行所需要的外部支持类包(.jar文件),可以根据不同项目所需的XFire特性选择所需要的支持类包。保守的方法是在Web项目中包含所有的外部支持类包(.jar文件)。

manual目录

  manual目录中包含有XFire框架的帮助文档,开发者可以从这些帮助文档中学习更多运用XFire框架实现SOA的知识和技巧。

modules目录

  modules目录中包含了XFire框架根据不同特性分别编译的二进制包文件。发布基于XFire框架的Web项目时,可以选择使用该目录下的所有.jar文件,也可以选择XFire-all-1.2.6.jar文件。

  XFire-all-1.2.6.jar

  XFire框架的二进制包文件,包含了全部的模块(modules)。

  LICENSE.txt

  LICENSE.txt文件中包含了XFire框架的授权协议。

  NOTICE.txt

  README.txt

  这两个文件中包含了XFire发布时的一些有用的信息。

编辑本段JDKServlet容器的支持

概述

  XFire - XFire框架支撑环境:XFire框架是一种基于Servlet技术的SOA应用开发框架,要正常运行基于XFire应用框架开发的企业应用,除了XFire框架本身之外,还需要JDK和Servlet容器的支持。

1JDK版本选择下载和安装

  XFire支持非常多的特性,其中不同的特性对JDK版本的要求有所不同,比如如果项目中选择基于JSR181标准发布Web服务,我们就需要选择JDK5或者以上版本,如果仅仅选择将Web服务绑定到最简单的POJO,我们只需要选择JDK1.4版本即可。

  JDK各版本均可以在java.sun.com网站上下载,如何安装JDK请参考SUN公司的相关技术文档和JDK的帮助文档。

2Servlet容器下载和安装

  XFire是一种基于Servlet技术的SOA应用开发框架,需要Servlet容器的支持。XFire支持在多种Servlet容器中运行,包括Websphere、Weblogic、TOMCAT等。为了说明的简单,我们选择使用TOMCAT(版本5.0.30)作为XFire的运行容器,所有配置过程和发布步骤的说明也均是针对TOMCAT,如果读者使用TOMCAT之外的其它Servlet容器或者选择了TOMCAT的其它版本,下面的配置过程和步骤可能需要做出调整,请读者根据实际Servlet容器的帮助文档进行相应调整。

  TOMCAT各版本均可以在tomcat.apache.org网站上下载,如何正确安装TOMCAT服务器请参考TOMCAT服务器的帮助文档。

3xalan

  XFire需要xalan项目的支持,然而1.2.6版本中并没有带有相应的jar文件,因此请访问xml.apache.org,下载xalan项目的二进制包。

编辑本段如何从零开始创建XFire应用开发环境

概述

  编辑本段 回目录 XFire - XFire应用配置:前面的章节中我们下载和安装了XFire安装包和所需要的支持环境,现在我们开始学习如何从零开始创建XFire应用开发环境。下面的所有配置过程和发布步骤均针对TOMCAT(版本5.0.30)服务器,如果选择其它的Servlet容器,下面的配置过程和步骤可能需要做出调整,请读者根据实际Servlet容器的帮助文档进行相应调整。

1创建Web应用目录和基本元素

  在%TOMCAT_HOME%/webapps目录下创建新的Web应用目录“XFire”

  [注]其中的%TOMCAT_HOME%指向TOMCAT的安装目录。

  在”XFire”目录下创建”WEB-INF”目录、

  在”WEB-INF”目录下创建”lib”目录和”classes”目录

  在”WEB-INF”目录下创建Web应用描述文件”web.xml”,”web.xml”文件的内容见清单1-1。

  清单1-1WEB-INF\web.xml (servlet已定义)

  <?xml version="1.0" encoding="ISO-8859-1"?>

  <!-- START SNIPPET: webxml -->

  <!DOCTYPE web-app

  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

  "http: // java.sun.com / dtd/web-app_2_3.dtd">

  <web-app>

  <servlet>

  <servlet-name>xfireServlet</servlet-name>

  <display-name>xfire Servlet</display-name>

  <servlet-class>

  org.codehaus.xfire.transport.http.xfireConfigurableServlet

  </servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>xfireServlet</servlet-name>

  <url-pattern>/servlet/xfireServlet/*</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

  <servlet-name>xfireServlet</servlet-name>

  <url-pattern>/services/*</url-pattern>

  </servlet-mapping>

  </web-app>

  <!-- END SNIPPET: webxml -->

2拷贝XFire所需的支持类包文件

  拷贝%XFIRE_HOME%/lib目录下所有文件到“1、创建Web应用目录和基本元素”中所创建的”lib”目录下,将%XFIRE_HOME%/XFire-all-1.2.6.jar文件也拷贝到“1、创建Web应用目录和基本元素”中所创建的”lib”目录下。将xalan安装包中的所有jar文件和所需要的支持jar文件拷贝到相同的”lib”目录下。

  [注]为了减少拷贝的jar文件的数目,开发者可以根据项目的需要选择需要拷贝的jar文件,而不是全部拷贝,如何根据需要选择拷贝合适的类包文件请访问XFire站点。

3配置XFire框架运行所需的Servlet

  修改web.xml文件,在其中增加如下Servlet定义内容。

4创建XFire框架的服务发布文件

  4、创建XFire框架的服务发布文件services.xml

  在“1、创建Web应用目录和基本元素”中创建的classes目录下新建目录”META-INF\xfire”;

  在步骤a)中新建的”xfire”文件目录下创建新文件services.xml,文件的默认内容如清单1-2。

  清单1-2WEB-INF\classes\META-INF\xfire\services.xml

  编辑本段 回目录 XFire - 参考资料:访问XFire框架用户指南可以获得更多关于XFi

  

  

Eclipse中配置xfire

re的使用帮助。

  访问XFire的Eclipse插件可以获得关于XFire提供的Eclipse插件的更多信息。

编辑本段 POJO 发布成 Web 服务

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

  一种方式是直接使用 Web 服务接口和 Web 服务实现类(POJO)来发布; 另一种方式是基于 JSR181 标准和注释技术将被注释的 POJO 发布成 Web 服务; 下面的章节中我们将学习使用第一种方式来完成 POJO 的 Web 服务发布。我们将使用经典的 ”Hello World!”例子来演示将 POJO 发布成 Web 服务所需要的步骤,不过我们不再是简单的访问一个 Java 方法来输出 ”Hello World!”字符串,而是转为在 SOA 环境下实现:Web 服务客户端通过访问服务器端发布成 Web 服务的 POJO 获得返回的 ”Hello World!”字符串后输出到客户端的控制台上。

  将 POJO 发布成 Web 服务的基本步骤如下:

  创建 Web 服务接口,声明该 Web 服务对外暴露的接口; 创建 Web 服务实现类,为 Web 服务接口提供实现; 修改 XFire 框架的服务发布文件 ---- services.xml,将 POJO 发布成 Web 服务

 

posted @ 2013-05-24 10:48  若 ♂ 只如初见  阅读(613)  评论(0编辑  收藏  举报