xfire的client的JAVA调用方式

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基础还是要多多去验证的。有空再去验证吧。呵呵。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值