`

XFire的使用小结

阅读更多

以前就开始看过一些XFire的资料,但是每一次都是按照书写的例子才能写出一些基本的例子,根本不理解,目前又做了一种发布webservice的方式 通过继承XFireServlet的方式,这种方式的好处就是简单 不需要配置services.xml文件 


User
public class User {
private int id;
private String name;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}

 


UserManager
public interface UserManager {
List findAllUser();
}

    UserManagerImpl

public class UserManagerImpl implements UserManager {

	public List findAllUser() {
		List list = new ArrayList();
		for(int i = 1 ; i <= 3 ; i ++) {
			User user = new User();
			user.setId(i);
			user.setName("user" + i);
			list.add(user);
		}
		return list;
	}

}

    最简单的两个方法

建立一个SOAPServlet继承XFireServlet,覆盖init()方法,在init()方法里面注册自己的服务:
public class SOAPServlet extends XFireServlet {
@Override
public void init() throws ServletException {
  super.init();
  ServiceRegistry registry = this.getXFire().getServiceRegistry();
  ObjectServiceFactory factory = new ObjectServiceFactory();
  Service service = factory.create(UserManager.class); // 根据具体类型创建服务
  service.setInvoker(new BeanInvoker(new UserManagerImpl())); // 设定服务调用模式
  registry.register(service); // 向服务管理注册服务
}
}

   注意一下super.init(),是必须加的,因为XFire核心的 Http Transprot是通过 XFireServletController实现的,我们可以来看下XFireServlet的init()方法里面都干了什么

写道
public void init()
throws ServletException
{
try
{
super.init();
xfire = createXFire();
controller = createController();//这里去创建XFireServletController
}
catch (Throwable tx)
{
// log.er
logger.error("Error initializing XFireServlet.", tx);
throw new ServletException("Error initializing XFireServlet.", tx);
}
}

 如果没有init()就会报空指针错误,当然这个错误很明显 会提示你XFireServletController为空,我只是在这里说明下,因为小弟水平太次了,就犯了这个错误,一看空指针也没有看详细信息就以为失败了,真是太2了。


再配置下web.xml把我们的servlet配置进去:

写道
<servlet>
<servlet-name>SOAPServlet</servlet-name>
<servlet-class>com.soap.SOAPServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SOAPServlet</servlet-name>
<url-pattern>/soap/*</url-pattern>
</servlet-mapping>

 好了启动服务访问下:

http://127.0.0.1:8080/webservice/soap/UserManager?wsdl


呵呵,估计又报错了,说类型不能识别,使用jdk1.5以上的朋友可以加上泛型把上面的List 都改成List<User>再跑就行了,但是很多情况下又得去支持jdk1.4那么我们就必须在接口的目录下添加一个xxx.aegis.xml文件了:


这里就是UserManager.aegis.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<mappings>
    <mapping>
        <method name="findAllUser">
            <return-type componentType="com.soap.User"/>
        </method>
    </mapping>
</mappings>


相信大家一看就知道这个文件的意思了,但是为了帮助跟我一样的菜鸟  我稍微解释下这个文件的意思:

第一行不用说,xml的固定写法:

<mappings>下的mapping映射的<method>就是我们接口中的方法,为什么要这个配置文件呢,因为XFire只支持八种基本类型,有时候我都忘了八种基本类型有char和short了(char byte short  int long double float boolean 呵呵 这里补充下,真是太菜了,要不说出去都丢人了),好了 也就是说不是这八种类型 不管是参数 和 返回值  XFire都不知道,就需要我们手动配置了


<method name="findAllUser"> //name属性 方法名为findAllUser 

           //如果你的方法里面有参数也不是这八种基本类型 比如有个参数是 User user ,String str

          //配置

<parameter index="0" keyType="com.soap.User" componentType="com.soap.User" mappedName="user"/>   //名称就知道了 我就 不解释了

  <parameter index="1" keyType="java.lang.String" componentType="java.lang.String" mappedName="str"/>
            <return-type componentType="com.soap.User"/> //返回类型的List中封装的是什么 看来泛型真是个好东西,可惜为了兼容1.4只能忍了
</method>



好了不使用泛型的方式也行了 部署测试下。



可能还有需求我不想用web方式  用j2se方式 能发布xfire吗,答案是肯定的,XFire为我们提供了一个XFireHttpServer ,在上面那个基础上我写了一个文件:

public class ServiceStarter {
   
    XFireHttpServer server;
   
    public void start() throws Exception {
        //创建service
        ObjectServiceFactory serviceFactory = new ObjectServiceFactory();
        Service endpoint = serviceFactory.create(UserManager.class);
        Service endpoint1 = serviceFactory.create(WebserviceInterface.class);
       
        endpoint.setInvoker(new BeanInvoker(new UserManagerImpl()));
        endpoint1.setInvoker(new BeanInvoker(new Webservicehandler()));
       
        //我这里注册了两个服务  就是为了验证下看能否注册多个接口  上面XFire的例子也是一样的

       //这里就必须手动建立xfire了
        XFire xfire = XFireFactory.newInstance().getXFire();
        xfire.getServiceRegistry().register(endpoint);
        xfire.getServiceRegistry().register(endpoint1);
       
        //建立对象
        server = new XFireHttpServer();

       //设置监听端口
        server.setPort(8081);

     //开启服务
        server.start();
    }


    public void stop() throws Exception {
        server.stop();
    }
   
    public static void main(String[] args) {
        ServiceStarter starter = new ServiceStarter();
        try {
            starter.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这里写的很简单,直接运行下这个方法   然后访问:

http://127.0.0.1:8081/UserManager?wsdl      这种情况估计不常见 知道下就可以了    



还有配置service.xml方式的例子 我就不介绍了,那种例子别人给的太多了 。。。。

 

 

 

分享到:
评论

相关推荐

    xFire的详细使用与实例

    其中包含XFire的详细解说,还有,单独的实例,还有和spring相结合的实例。包含详细说明和源码,天涯精心总结与实践。

    SSH整合WebService框架XFire搭建总结.pdf

    SSH整合WebService框架XFire搭建总结.pdf

    搜集网上的资料总结的XFire,Axis2,CXF的对比

    手头上做的java web的项目需要调用.net wcf发布的webservice,查资料看到XFire,Axis2,CXF这三种方式,然后仔细进行了一下对比。资料全来源自网络,不保证完全正确。

    webservice xfire配置示例

    忽然项目需要用到webservice可是到网上搜了好多都不顶用。所以,自己就总结了一下,希望对你有用。

    webservices xfire实例

    该资源包括两个文件夹一个是webservices xfire框架的客户端,另一个是服务器端,该项目采用的是IDE环境自动生成的,使用的是myeclipse8.6,如果不想使用IDE环境生成就自己下载xfire相应的jar包然后导入,即可自己...

    xfire 学习笔记

    这是我总结xfire学习笔记,里面包括了xfire的配置和一些异常情况的处理

    xfire+spring+webservice入门例子

    公司要求用xfire框架来使用webservice来完成客户短信平台的需求,我也仔细再网上找了很多资料,最后总结后,做成一个入门例子。包含了所有的架包导入即用。

    xfire 开发包

    网上找了n个,测试了n遍之后终于总结出了真正可用的包。分享给大家。希望能够给您节省些时间。

    Spring in Action(第2版)中文版

    目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.4.2aop使用 ...1.5小结 ...2.1.2使用应用上下文 ...2.3.2使用其他的bean ...2.4.2混合使用自动和手动装配 ...b.4小结

    Spring in Action(第二版 中文高清版).part2

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结

    Spring in Action(第二版 中文高清版).part1

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结

    Grails权威指南

    第1章 寻找grails之旅  1.1 java的困惑  1.2 webc2.0时代  1.3 java的力量  1.4 什么是grails  1.4.1 与java集成 ... 1.5 使用grails的原因 ... 1.8 本章小结 ... 11.7 本章小结

    java+servlet+javabean实验报告(8)

    掌握web服务的基本概念和工作原理,学会创建和调用web服务。JUNIT测试的应用,程序的正确需要大量的测试,JUnit是一个Java测试框架,用于编写和运行可重复的测试。学会XFire框架下开发和配置web服务

    Spring中文帮助文档

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

    Spring API

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

    Spring 2.0 开发参考手册

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

    webservice的服务器端开发

    这个是我在工作中总结的关于。是使用XFire来做服务器端开发的总结。另,有1个资源分,请大家谅解。本来想完全共享出来的,但是CSDN的资源分,逼得我。。。大家谅解

    spring chm文档

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...

    Spring-Reference_zh_CN(Spring中文参考手册)

    14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.6.2.1. 文档视图定义 14.6.2.2. Controller 代码 14.6.2.3. Excel视图子类 14.6.2.4. PDF视图子类 14.7. JasperReports 14.7.1. 依赖...

    WebService调用的几种方式

    WebService调用的几种方式,总结了Axis,Cxf,HttpClient,Myeclipse反向生成,XFire调用方式。

Global site tag (gtag.js) - Google Analytics