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 xfire client_xfire的client的JAVA调用方式
最新推荐文章于 2021-02-24 17:46:39 发布