zoukankan      html  css  js  c++  java
  • 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 服务

  • 相关阅读:
    grep命令详解;单引号和双引号区别(转载)
    Linux下的系统性能调优工具--Perf (转载)
    Shiro
    WebLogic和Tomcat
    MD5加密(java和c#)
    深入理解java泛型
    VS2015常用快捷键总结(转)
    Java 反射 使用总结
    @RequestParam与@PathVariable的区别
    SVN被锁定的几种解决方法
  • 原文地址:https://www.cnblogs.com/lbangel/p/3096369.html
Copyright © 2011-2022 走看看