`
sillycat
  • 浏览: 2487373 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

xfire的client的JAVA调用方式

    博客分类:
  • SOA
阅读更多
xfire的client的JAVA调用方式

平时我们调用xfire都是实现了spring的FactoryBean接口,写了一个工具类,将xfire的client bean配置在spring容器中管理并使用的。但是今天遇到一个特殊的场景。
BPS流程引擎在流程的某一个节点触发一个事件的时候,配置的包名+类名+方法名+参数,估计是直接new出类型,然后invoke某个方法的,所以根本得不到spring的相关配置的依赖。
所以这里需要把这个xfire的client调用修改为直接用java的application去启动的方式,而不是依赖于spring容器。

参考了xfire的文档,其实主要还是用到了xfire的基类,写了一个工具类,需要传递web service服务端的URI和接口的名称,就可以返回我们所要调用的service了。单元测试中调用方式如下:
public void testGetUserFromObjectAndURI() throws ClassNotFoundException {
String interfaceName =                 "com.sillycat.core.webservice.interfaces.UserService";
String url = "http://localhost:8088/easyserver/services/UserService";
UserService userService = (UserService) XFireClient.getClient    (interfaceName, url);
IUser iuser = userService.get(null);
System.out.println("fromObjectAndURI: " + iuser.getName());
System.out.println("fromObjectAndURI: " + iuser.getEmail());
}
需要提供了接口名称(包名写全),同时服务端地址;就可以返回UserService的服务了,直接调用其get方法。

工具类代码如下,主要参考xfire的文档写的,这里只是记录一下,备用:
package com.sillycat.core.commons.plugins.webservice.xfire;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
public class XFireClient {
private static final Log log = LogFactory.getLog(XFireClient.class);
private static ObjectServiceFactory objectServiceFactory = new ObjectServiceFactory();
private static XFireProxyFactory xfireProxyFactory = new XFireProxyFactory();
public static Object getClient(String interfaceName, String url) {
   Service serviceModel = null;
   try {
    serviceModel = objectServiceFactory.create(Class
      .forName(interfaceName));
   } catch (ClassNotFoundException e) {
    log.error(e.getMessage(), e);
    return null;
   }
   String serviceURL = url;
   Object service = null;
   try {
    service = xfireProxyFactory.create(serviceModel, serviceURL);
   } catch (Exception e) {
    log.error(e.getMessage(), e);
    throw new RuntimeException(e);
   }
   return service;
}
}

至于工具类里面的
private static ObjectServiceFactory objectServiceFactory = new ObjectServiceFactory();
private static XFireProxyFactory xfireProxyFactory = new XFireProxyFactory();
我觉得写成类变量比在方法中new要更节约效率的,但是也不是很确信,呵呵。其实JAVA基础还是要多多去验证的。有空再去验证吧。呵呵。
分享到:
评论

相关推荐

    Xfire调用webservice无法传递参数问题

    此程序demo详细描述的从发布接口到调用接口的全部过程,详细描述了Xfire调用webservice参数无法传递的问题。

    xfire https

    xfire 实现https 调用webservice 接口 jar包齐全可直接导入eclipse进行二次开发

    xfire客户端生成

    xfire客户端生成自动生成java代码调用

    java调用net开发的webservice实例

    java调用net开发的webservice实例下载 问题终于解决了,之前加上?wsdl的时候报如下错: - I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect - Retrying ...

    简单的webservice例子(java,xfire)

    (采用第一种获取方式,知道服务端的情况下使用,方法为输入一个用户user,匹配到user返回相应能看到的结果) (注释的方法为第二种获取方式,不知道服务端的情况下,创建相应BaseProxy类用于接收,方法为输入一个...

    xfire组件实现webservice实例

    本文详细介绍了利用xfire组件实现webservice的服务端和客户端实例,适合入门参考和使用!

    跨项目调用webservice接口

    ps:主要解决在webservice中,我们想从另外一个项目调用webservice项目的接口,也就是跨项目调用接口 这里主要用到了xfire wsdl 废话不说了 直接上东西 1. 首先新建一个项目 2. 在src下创建两个文件: a) 第一个是你...

    webservice远程调用,返回数据生成xml文件,并通过SAX解析出来

    webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析...在client工程我使用的是XFire技术,在webservice工程我使用的是axis技术来实现Web service。我们可以学习其中的一种就可以了

    webservice服务端以及客户端

    本人所用的是myeclipse6.0写的,应该跟版本没有关系,请将serviceclient里面配置文件路径更改,调用webservice的返回是字符串,可以在HelloWebServiseImpl.java里面更改,项目使用的是xfire架构,供新手学习。...

    Remote接口的使用

    前段时间在学习webServices时,我用的是xfire, 我没怎么去看源代码,却对另一个类似于这个的东东深深的吸引着我Java Remote接口. 首先,我们的webservices都有服务器(Server)和客户端(Client)这个东西,说白了,就是我...

Global site tag (gtag.js) - Google Analytics