activiti designer源码的研究(一) 采用Axis2调用Webservice
2015-01-22 20:27
453 查看
最近由于项目的需要,需要对eclipse中的Eclipse Activiti designer插件进行扩充,使其能够调用的webservice,但是遇到了classNotFoundException,我的方法如下:
<1> 在org.activiti.designer.gui中添加了调用webserviced的类
<2> 在org.activiti.designer.lib中添加了axis2的jar
<3> 在org.activiti.designer.lib的manifest.mf中export了axis2
<4>在org.activiti.designer.gui中manifest.mf中的dependency中添加了lib
在eclipse中测试run eclipse application时,可以运行,但是导出之后放到rcp rich client中时,会发现访问不到类,说明,不能访问到第三方的jar包
解决方法:把axis2放到某个目录下,然后直接加载,然后使用反射调用webservice
<1> 在org.activiti.designer.gui中添加了调用webserviced的类
<2> 在org.activiti.designer.lib中添加了axis2的jar
<3> 在org.activiti.designer.lib的manifest.mf中export了axis2
<4>在org.activiti.designer.gui中manifest.mf中的dependency中添加了lib
在eclipse中测试run eclipse application时,可以运行,但是导出之后放到rcp rich client中时,会发现访问不到类,说明,不能访问到第三方的jar包
解决方法:把axis2放到某个目录下,然后直接加载,然后使用反射调用webservice
public class ServiceUtil { //object(Array)转化为String public String makeArrayObject(Object array) { List tem = new ArrayList(); for (int i = 0; i < Array.getLength(array); i++) { tem.add(Array.get(array, i)); } for(int i=0;i<tem.size();i++) System.out.println(tem.get(i)); return String.valueOf(tem.get(0)); } public String getService(String socketAddress) { String result = null; URL[] urls = new URL[] {}; MyClassLoader classLoader = new MyClassLoader(urls, null); try { classLoader.addJar(new File("c:/jar/AXIS2.jar").toURI().toURL()); Class rpcserviceclient = classLoader.loadClass("org.apache.axis2.rpc.client.RPCServiceClient"); Object rpcserviceclientInstance = rpcserviceclient.newInstance(); Method getoptions = rpcserviceclient.getMethod("getOptions", null); Object c = getoptions.invoke(rpcserviceclientInstance, null); Class options = c.getClass(); Class endpointreference = classLoader.loadClass("org.apache.axis2.addressing.EndpointReference"); Constructor endpointreferenceCons = endpointreference.getConstructor(String.class); Object endpointreferenceInstance = endpointreferenceCons.newInstance(socketAddress+"ServiceUtil"); Method setTo = options.getMethod("setTo", endpointreferenceInstance.getClass()); setTo.invoke(c, endpointreferenceInstance); Object[] objects = new Object[] {}; Class<?>[] classes = new Class[] { String.class }; QName qname = new QName("http://servicemanagement/", "getServiceInfo"); Method invokebloking = rpcserviceclient.getMethod("invokeBlocking",qname.getClass(),objects.getClass(),classes.getClass()); Object obj = invokebloking.invoke(rpcserviceclientInstance,qname,objects,classes); result = makeArrayObject(obj); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } class MyClassLoader extends URLClassLoader { public MyClassLoader(URL[] urls) { super(urls); } public MyClassLoader(URL[] urls, ClassLoader parent) { super(urls, parent); } public void addJar(URL url) { this.addURL(url); } } public static void main(String[]args){ String str = new ServiceUtil().getService("http://localhost:8010/ServiceUtil"); System.out.println(str); } }
相关文章推荐
- activiti designer源码的研究(三) 之servicetask调用除Java之后的其他语言发布的webservice
- activiti designer源码的研究(四) 之servicetask调用webservice(example)
- EJBCA与项目整合-第三章-EJBCA源码研究-用户实体操作WebService接口调用
- java调用(axis2)WebService传递对象类型参数(源码)
- activiti designer源码的研究(二)wsdl与bpmn20.xml的对照关系(下)
- axis2 webservice入门学识(JS,Java,PHP调用实例源码)
- activiti designer源码的研究(二)wsdl与bpmn20.xml的对照关系(上)
- axis2 webservice入门知识(JS,Java,PHP调用实例源码)
- .Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#)
- .Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#)
- axis2 调用webService(包含用axis2和xfire发布的)实例,加注释
- 四、 用axis2的辅助工具发布、调用WebService
- axis2创建webservice客户端全过程(调用.net web服务)
- Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】
- java使用AXIS2调用asp.net的WebService
- Silverlight实用窍门系列:22.Silverlight使用WebService调用C++,Delphi编写的DLL文件【实例源码下载】
- 四、 用axis2的辅助工具发布、调用WebService
- .Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#)
- .Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#)
- .Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) [轉]Redfox