网上关于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. Oracle 遇到的问题 (1)

    1.ORA-01502:索引'DBEPMS.SYS_C009390'或这类索引的分区处于不可用状态 解决方法:[注 索引命名规则 IX_表名简称_列名简称/IX_表名简称_序号(索引长度在30字符以内 ...

  2. JAVAWEB项目如何实现验证码

    验证码基础 一.什么是验证码及它的作用 :验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意 ...

  3. [Android Tips] 19. Android Studio Plugins

    Code Generation GsonFormat json 字符串生成实体类 https://github.com/zzz40500/GsonFormat Android Parcelable C ...

  4. 如何用jenkins实现自动化构建新版本和二维码下载

    最近公司开发了自己的app,研发过程中对于测试人员来说,经常会像开发的人员询问,有没有最新的包啊(apk打包后的新版本),以免你测试的时候,提交了一些缺陷,实际上人家已经解决了.当然你也可以说你们公司 ...

  5. 10分钟学习pandas

    10 Minutes to pandas This is a short introduction to pandas, geared mainly for new users. You can se ...

  6. 货运APP产品魔力=卓越功能×情感诉求

    货运APP产品魔力=卓越功能×情感诉求   [导语]在滴滴打车.快的打车软件风靡全国之际,很多企业也在探索如何将其应用到公路货运领域用以整合社会运力资源.但一方面大多数人聚焦的是干线运输中的长途货车运 ...

  7. Ajax请求成功,进入error回掉函数

    后台无返回值,则不需要datatype.

  8. AC6102 开发板千兆以太网UDP传输实验

    AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...

  9. centos7 卸载openJDK 安装jdk7

    [root@cms02 root]# rpm -qa | grep jdk java--openjdk-headless-1.7.0.75-2.5.4.2.el7_0.x86_64 java--ope ...

  10. [已解决][HTML5]基于WebSocket开发小蝌蚪应用

    前端时间在网上看到别人用WebSocket开发的小蝌蚪应用很炫酷,不过是php,于是想着用java也实现一套, 找到前端 https://github.com/danielmahal/Rumpetro ...