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基础还是要多多去验证的。有空再去验证吧。呵呵。

你可能感兴趣的:(java,apache,spring,webservice,配置管理)