网上关于XFire入门的教程不少,要么是讲得很简单,就像Hello World一样的程序,要么就是通过IDE集成的工具来开发的,这对于不同的人群有诸多不便,关于XFire的一些详细的信息就不再多讲,可以参考官方网站和相关的文档,这里讲一个完整的入门实例。
实例中包括三个情况,我想基本上可以概括所有的需求,或者自己稍加扩展即可。先来看看我们的Interface。

  1package test;
  2 
  3import java.util.List;
  4
  5public 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两个类的代码如下:

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

 <?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,代码如下:

1<?xml version="1.0" encoding="UTF-8"?>
2<mappings>
3    <mapping>
4        <method name="test">-----接口中方法名
5            <parameter index="0" componentType="java.lang.String" />-----接受的参数类型,index--第几个参数
6            <return-type componentType="test.Course" />-----List内对象的完整类名
7        </method>
8    </mapping>
9</mappings>

请注意,此文件一定要放到与IHelloService.java相同的目录下面,否则会出错。
5、在Web.xml中配置XFire需要用到的Servlet,代码如下:

 <?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完整入门教程的更多相关文章

  1. PyQt完整入门教程

    1.GUI开发框架简介 19年来,一直在做Android ROM相关测试,也有了一定的积累:20年,计划把之前完整的测试方案.脚本.工具进行整合复用. 第一期计划是开发一个GUI的测试工具,近期也进行 ...

  2. MVC5 + EF6 完整入门教程三

    期待已久的EF终于来了. 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型,将之前的示例添加数据库查询验证功能. 文章提纲 概述 & ...

  3. MVC5 + EF6 完整入门教程三:EF来了

    期待已久的EF终于来了 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型,将之前的示例添加数据库查询验证功能. 文章提纲 概述 & ...

  4. AjaxPro2完整入门教程

    一.目录 简单类型数据传送(介绍缓存,访问Session等) 表类型数据传送 数组类型数据传送(包含自定义类型数据) 二.环境搭建 1.这里本人用的是VS2012. 2.新建一个空的Web项目(.NE ...

  5. Sklearn使用良心完整入门教程

    The complete .ipynb file can be download through my share in onedrive:https://1drv.ms/u/s!Al86h1dThX ...

  6. D3.js的v5版本入门教程(第九章)——完整的柱状图

    D3.js的v5版本入门教程(第九章) 一个完整的柱状图应该包括的元素有——矩形.文字.坐标轴,现在,我们就来一一绘制它们,这章是前面几章的综合,这一章只有少量新的知识点,它们是 d3.scaleBa ...

  7. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  8. ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  9. Power BI入门教程

    题记:这篇文章不仅是Power BI的入门教程,同时相对于Qlik Sense进行了简单比较. 最近把一个Qlik Sense的示例应用手动转成了Power BI的应用,把相关步骤和遇到的问题记录如下 ...

随机推荐

  1. 学霸数据处理项目之数据处理网页以及后台以及C#代码部分开发者手册

    写在前面,本文将详细介绍学霸数据处理项目中的数据处理网页与后台函数,以及c#代码中每一个方法的意义及其一些在运行方面需要注意的细节,供开发人员使用,开发人员在阅读相关方法说明时请参照相关代码,对于本文 ...

  2. I’m Sure It Will Only Take You A Few Days To Code

    from:http://danshipper.com/non-technical-people-cant-estimate-developmen “So the site’s pretty simpl ...

  3. 在github分支上上传空文件夹

    GIT工具是依靠文件来识别文件夹的,对于空的文件夹是不能识别的.因此如果需要在代码中增加一个空文件夹,同时需要在文件夹中增加一个空文件.gitkeep 当批量增加空文件夹时,可以在GIT库的根目录下输 ...

  4. C#中一些常用的正则表达式

    需要引用using System.Text.RegularExpressions; Regex r = new Regex("^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@( ...

  5. jmeter安装配置教程

    1.下载Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 目前最新版为3.1,其余文件如源代码等也可从如下官网下载: http://jm ...

  6. [liusy.api-SMJ]-MAVEN archetype 创建项目

    •选择或创建工作空间 Select a workspace –File – Switch Workspace - other

  7. 【转】Delphi+Halcon实战一:两行代码识别QR二维码

    Delphi+Halcon实战一:两行代码识别QR二维码 感谢网友:绝代双椒( QQ号应原作者要求隐藏了:xxxx6348)的支持 本文是绝代双椒的作品,因为最近在忙zw量化培训,和ziwang.co ...

  8. Win10 驱动装不上,提示:Windows 无法验证此设备所需的驱动程序的数字签名。该值受安全引导策略保护,无法进行修改或删除。

    Windows 无法验证此设备所需的驱动程序的数字签名.某软件或硬件最近有所更改,可能安装了签名错误或损毁的文件,或者安装的文件可能是来路不明的恶意软件.(代码52) 最近换了新主板,升级了Windo ...

  9. 富文本编辑器TInyMCE,本地图片上传(Image Upload)

    TinyMCE 官网 (类似:百度的富文本web编辑器UEditor) 第一步 下载 TinyMCE,解压后放入工程,在需要的HTML页面引入tinymce.min.js. 第二步 下载tinyMCE ...

  10. Hadoop集群datanode磁盘不均衡的解决方案

    一.引言: Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点,节点与节点之间磁盘大小不一样等等.当hdfs出现不平衡状况的时候,将引发很多问题,比 ...