`
walklen
  • 浏览: 25384 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

webservice应用,xfire、classloader

 
阅读更多

     XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成。

    最近一项目,需要用到webservice,刚开始,使用xfire,甚是方便,特别是客户端代码,干净整洁,但是xfire用了jdom1.0.jar,而我们项目是基于原有的一个平台上面开发的子系统,用的是jdom.jar,较低版本,可恶,无奈之下,由于项目交期问题,只好换rmi。

rmi很简单,

rmi服务器:

publicclass BI RmiServiceContextListener  implements ServletContextListener{

    publicvoid contextInitialized(ServletContextEvent arg0) {

       try {

           BIDataWebService obj = new BIDataImp() ;

           LocateRegistry.createRegistry(1299);

           Naming.rebind("rmi://localhost:1299/BIDataWebService", obj);

            System.out.println("RMI Server ready");

       } catch (Exception e) {

           System.err.println("RmiServiceContextListener err: " + e.getMessage());

           e.printStackTrace();

       }

    }

}

 

rmi客户端:

String rmiRoot = "rmi://"+rb.getRestaurantService()+":1299/BIDataWebService";

BIDataWebService rbws=(BIDataWebService)Naming.lookup(rmiRoot);

 

 

   系统发布使用了,对之前的xrife运用不甘心就此放过,觉得包冲突的问题可以解决,继续研究了下,想到类加载器,是否可以自定义一加载器,专门加载xfire的相关包和使用到的jdom1.0.jar,由于类加载器的隔离原因,不会影响平台其他系统的使用,一试,结果可行,问题就是在客户端在加载xfire的时候到必须使用反射调用,要不然会有ClassCastException,原因是自定义的加载器会和tomcat的加载器同时加载同一个class。

大体代码如下:

自定义的classloader

撇开了双亲委派模式,优先用本加载器加载xfire相关库类,最终能使用上jdom-1.0.jar.

还要一大推的反射调用。

publicclass XfireClassLoader extends URLClassLoader{

    protected ClassLoader parent = null;

    public XfireClassLoader(URL[] urls,ClassLoader classLoader) {

       super(urls);

       this.parent = classLoader;

    }

   

    @Override

    publicfinalsynchronized Class<?> loadClass(String name,boolean r) throws ClassNotFoundException {

       Class c = super.findLoadedClass(name);

       if(c==null){

           try{

              c = super.findClass(name);//调用URLClassLoaderfindClass

           }catch(ClassNotFoundException e){

              c = parent.loadClass(name);

           }

       }

       return c;

    }

}

 

 

Xfire客户端反射调用:

public BIDataWebService getBIDataWebService() throws Exception{

 

       Class c =XfireClassLoader.loadClass("org.codehaus.xfire.service.binding.ObjectServiceFactory",true);

       Object objectServiceFactory = c.newInstance();

       Method method = c.getMethod("create",  Class.class);

      

       Object srvcModel = method.invoke(objectServiceFactory, RestaurantBIData.class);

      

       Class xfireFactoryClass = XfireClassLoader.loadClass("org.codehaus.xfire.XFireFactory",true);

       Method newInstanceMethod = xfireFactoryClass.getMethod("newInstance");

       Method getXFireMethod = xfireFactoryClass.getMethod("getXFire");

       Object XFireFactory = newInstanceMethod.invoke(null, null);

      

       Object o = getXFireMethod.invoke(XFireFactory, null);

      

       Class XFireProxyFactoryClass = XfireClassLoader.loadClass("org.codehaus.xfire.client.XFireProxyFactory",true);

       Class XFire = XfireClassLoader.loadClass("org.codehaus.xfire.XFire",true);

       Constructor constructor = XFireProxyFactoryClass.getConstructor(XFire);

       Object XFireProxyFactory = constructor.newInstance(o);

       String url = "http://localhost:8888/bi/services/BIDataWebService";

 

       Method createMethod = XFireProxyFactoryClass.getMethod("create", srvcModel.getClass(),String.class);

       BIDataWebService srvc = (BIDataWebService )createMethod.invoke(XFireProxyFactory,srvcModel, url);

 

       return srvc;

    }

 

 

 

 

分享到:
评论

相关推荐

    webService-xfire入门doc

    【标题】"webService-xfire入门doc" 涉及的是Web服务技术中的XFire框架,这是一款用于构建和消费Web服务的开源Java库。XFire是早期流行的Web服务实现,它允许开发者轻松地将Java对象转换为Web服务,反之亦然。 ...

    XFire--Webservice入门xfire

    XFire--Webservice入门xfire

    WebService之XFire开发文档和代码

    **WebService与XFire详解** **一、WebService简介** WebService是一种基于Web的、平台无关的、标准的接口技术,它允许不同系统之间的数据交换。通过XML(可扩展标记语言)进行数据编码,HTTP(超文本传输协议)作为...

    java使用XFire调用webService接口

    "Java 使用 XFire 调用 webService 接口" 在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。...通过本文,我们可以更好地理解和应用 XFire 框架,提高 Web 服务的开发和集成效率。

    xfire调用webservice

    xfire调用webservice xfire是一款基于Java的开源WebService框架,它提供了一个简单、灵活和高效的方式来开发和...xfire是一个功能强大且灵活的WebService框架,适合用于企业应用集成、web服务开发和API开发等场景。

    webService&xfire.ppt

    webService&xfire.ppt

    webservice spring xfire的实例

    XFire作为早期的选项,允许开发者轻松地在Spring应用中创建和消费Web服务,通过Aegis绑定来映射Java对象到SOAP消息。 2. **XFire简介**:XFire是基于Java的SOAP服务器,它简化了Web服务的开发过程,提供了动态WSDL...

    WebService之XFire和Jax实现身份验证

    WebService是Web服务的一种标准协议,它允许不同系统之间的应用程序通过互联网进行通信。XFire和JAX(Java API for XML)都是在Java环境中实现WebService的重要工具,它们分别提供了不同的方法来处理身份验证,确保...

    java webservice基于xfire实例

    Java WebService基于XFire的实例教程 Web服务是一种在分布式环境中提供互操作性的技术,它允许不同系统之间通过网络交换数据。在Java中,实现Web服务的一种流行框架就是XFire,一个快速、轻量级的SOAP(Simple ...

    xfire实现webservice实例

    在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同应用程序之间进行数据交换。XFire是Java平台上一个曾经流行的开源框架,专门用于构建和消费Web服务。本实例将深入探讨如何利用XFire来实现Web服务。 一、...

    eclipse开发webservice的xfire插件

    在编码阶段,XFire支持注解驱动的开发模式,这意味着你可以使用如`@WebService`和`@WebMethod`等JAX-WS注解来标记你的服务类和方法。这种方式使得代码更清晰,减少了XML配置的复杂性。 在部署方面,XFire插件可以...

    webservice(XFire)实例

    【webservice(XFire)实例详解】 在Java开发中,Webservice是一种常见的用于系统间通信的技术,它基于标准的SOAP(Simple Object Access Protocol)协议。XFire是早期流行的一款开源Java SOAP框架,它提供了轻量级的...

    Java使用XFire调用WebService接口

    这篇博客“Java使用XFire调用WebService接口”显然是讨论如何利用XFire这个开源框架来与Web服务交互。 XFire是Apache CXF项目的前身,它提供了一种简单的方式来创建和消费SOAP Web服务。XFire的强项在于其轻量级和...

    webservice Xfire .jar包

    1. **Web服务API**:Xfire的Web服务API可能允许开发者创建工具或应用,与Xfire服务器进行交互,获取用户的游戏状态、好友列表、聊天记录等信息。这些API可能是基于SOAP(Simple Object Access Protocol)或REST...

    webservice (xfire,axis2)

    Web服务(WebService)是一种基于网络的、分布式的模块化组件,允许不同的应用程序在不同的操作系统和编程语言之间进行通信。在给定的标题“webservice (xfire,axis2)”中,我们关注的是两个知名的Java WebService...

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

    ### SSH整合WebService框架XFire搭建总结 ...通过以上步骤,可以成功地将XFire整合到SSH框架中,从而实现基于WebService的应用开发。这种方式不仅能够充分利用各框架的优势,还能提高系统的可维护性和可扩展性。

    Webservice使用xfire发布及客户端调用

    - 使用XFire,你可以通过添加特定的注解(如@WebService)来标记你的类和方法,这样它们就会被识别为Web服务的操作。 - 接下来,你需要创建一个XFire实例,并配置服务端点地址。你可以通过XML配置文件或程序化方式...

    spring+xfire( 编写webservice完整配置+案例)

    Spring 和 XFire 是一个经典的组合,用于在Java应用程序中创建和消费Web服务。Spring作为一个强大的框架,提供了全面的依赖注入和面向切面编程能力,而XFire是早先的Web服务实现,它允许开发者轻松地将Java接口转换...

    webservice Xfire 源码整合

    webservice Xfire 源碼整合

    webservice_XFire开发相关jar包

    这个压缩包"webservice_XFire开发相关jar包"包含了XFire开发所需的库文件,解压后可以用于Java项目中实现Web服务的开发。 XFire的核心功能包括: 1. **XML绑定**:XFire使用XMLBeans或JAXB作为默认的XML绑定机制,...

Global site tag (gtag.js) - Google Analytics