博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cxf 创建动态webService
阅读量:6672 次
发布时间:2019-06-25

本文共 9322 字,大约阅读时间需要 31 分钟。

  hot3.png

D:\developTools\apache-cxf-2.5.2\samples\wsdl_first_dynamic_clientCXF 方法 cxf方法serviceInfo.getBindings()  BindingInfo--[BindingInfo http://schemas.xmlsoap.org/wsdl/soap/]serviceInfo.getDocumentation()  WS_0917_05package com.test;import java.beans.PropertyDescriptor;import java.io.File;import java.lang.reflect.Method;import java.net.URL;import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import javax.xml.bind.JAXBElement;import javax.xml.namespace.QName;import org.apache.cxf.endpoint.Client;import org.apache.cxf.endpoint.ClientImpl;import org.apache.cxf.endpoint.Endpoint;import org.apache.cxf.jaxb.JAXBUtils;import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;import org.apache.cxf.service.model.BindingInfo;import org.apache.cxf.service.model.BindingMessageInfo;import org.apache.cxf.service.model.BindingOperationInfo;import org.apache.cxf.service.model.EndpointInfo;import org.apache.cxf.service.model.MessagePartInfo;import org.apache.cxf.service.model.ServiceInfo;public class Test {     /**      *       * @throws Exception      */     public static void main(String[] args) throws Exception {      long begin = System.currentTimeMillis();      String namespace ="" ;       String service ="BIServicesSoap";      String methodName ="Drill_WS005";         // 远程webService的URL         String hostUrl = "http://172.16.66.50:8080/dswsbobje/qaawsservices/biws?wsdl=1&cuid=M1X4xPAAAHaDAPsA.AAAMzwAAqwQQjIAAAA";                    methodName="Drill_WS_0917_05";         hostUrl = "http://172.16.66.50:8080/dswsbobje/qaawsservices/biws?WSDL=1&cuid=M1X6lewACbH.APsA.AAAN0AAAqwQQjIAAAA";         try {//          System.getProperties().put("proxyHost", "proxy.cmcc");//          System.getProperties().put("proxyPort", "8080");             // 创建动态客户端             JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();             // 创建客户端连接             URL wsdlUrl = new URL(hostUrl);             Client client = factory.createClient(wsdlUrl);             ClientImpl clientImpl = (ClientImpl) client;             Endpoint endpoint = clientImpl.getEndpoint();             // Make use of CXF service model to introspect the existing WSDL             ServiceInfo serviceInfo = endpoint.getService().getServiceInfos().get(0);             namespace =  serviceInfo.getTargetNamespace();             serviceInfo.getName().getNamespaceURI();             serviceInfo.getProperty("Operation");          Collection
ends = serviceInfo.getEndpoints(); Iterator
qeIter=ends.iterator(); while(qeIter.hasNext()){ EndpointInfo einfo= qeIter.next(); System.out.println(einfo); } System.out.println("" + serviceInfo.getEndpoints()); System.out.println("document---"+serviceInfo.getInterface()); Map
properies= serviceInfo.getProperties(); System.out.println(properies.size()); for (String key : properies.keySet() ) { System.out.println("key--"+key+ "-----" + properies.get(key).toString()); } Set
qSet=serviceInfo.getMessages().keySet(); Iterator
qIter=qSet.iterator(); while(qIter.hasNext()){ QName q=qIter.next(); //包名 String packageName=JAXBUtils.namespaceURIToPackage(serviceInfo.getName().getNamespaceURI()); String className=JAXBUtils.nameToIdentifier(q.getLocalPart(),JAXBUtils.IdentifierType.INTERFACE); System.out.println(packageName+ "---className----" +className ); } String packageName=JAXBUtils.namespaceURIToPackage(serviceInfo.getName().getNamespaceURI()); Object person =Thread.currentThread().getContextClassLoader().loadClass(packageName+".LovValueIndex").newInstance(); // 创建QName来指定NameSpace和要调用的service QName bindingName = new QName(namespace, service); BindingInfo binding = serviceInfo.getBinding(bindingName); // 创建QName来指定NameSpace和要调用的方法 QName opName = new QName(namespace, methodName); BindingOperationInfo boi = binding.getOperation(opName); BindingMessageInfo inputMessageInfo = boi.getInput(); List
parts = inputMessageInfo.getMessageParts(); // 取得对象实例 MessagePartInfo partInfo = parts.get(0); Class
partClass = partInfo.getTypeClass(); Object inputObject = partClass.newInstance(); ReflectUtil.setFieldValue(inputObject, "login","bwadm") ; ReflectUtil.setFieldValue(inputObject, "password","bwadmbwadm") ; // 取得字段的set方法并赋值 List
> listdate = new ArrayList
>(); Map
map = new HashMap
(); map.put("index", "20160901"); map.put("valueofPrompt", "111111"); listdate.add(map); ReflectUtil.setFieldValue(inputObject, "销售出库日期", listdate,serviceInfo); // 调用客户端invoke()方法,把inputObject传递给要调用的方法并取得结果对象 Object[] result = client.invoke(opName, inputObject); // 取得的结果是一个对象 Object headerGetter = ReflectUtil.getFieldValue(result[0], "headers") ; Object headerrows = ReflectUtil.getFieldValue(headerGetter, "row") ; List
headerlist = (List
) headerrows; for (int i = 0; i < headerlist.size(); i++) { Object row = headerlist.get(i); Object rowValues = ReflectUtil.getFieldValue(row, "cell") ; System.out.println(rowValues); } Object resultGetter = ReflectUtil.getFieldValue(result[0], "table") ; Object rows = ReflectUtil.getFieldValue(resultGetter, "row") ; List
list = (List
) rows; List
> RElist = new ArrayList
>(); for (int i =0; i
rowObjs = (List
) rowValues;// for (int j = 0; j < rowObjs.size(); j++) {// System.out.println(rowObjs.get(j));// } RElist.add((List) rowValues); } System.out.println(RElist); long end = System.currentTimeMillis(); System.err.println(end-begin); } catch (Exception e) { e.printStackTrace(); } }}package com.test;import java.beans.IntrospectionException;import java.beans.PropertyDescriptor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.TypeVariable;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.xml.bind.JAXBElement;import javax.xml.namespace.QName;import org.apache.cxf.jaxb.JAXBUtils;import org.apache.cxf.service.model.ServiceInfo;public class ReflectUtil { public static Map
map = new HashMap
(); static{ map.put("login", "String.class"); map.put("password", "String.class"); map.put("resetState", "Boolean.class"); map.put("refresh", "Boolean.class"); map.put("getFromLatestDocumentInstance", "Boolean.class"); map.put("getFromUserInstance", "Boolean.class"); map.put("turnOutputToVTable", "Boolean.class"); map.put("closeDocument", "Boolean.class"); map.put("endRow", "Integer.class"); map.put("startRow", "Integer.class"); } public static void setFieldValue(Object obj , String field,String fieldValue) { Class
classs = obj.getClass(); try {//取有get set方法的字段 PropertyDescriptor partPropertyDescriptor = new PropertyDescriptor(field, classs); Method methodSetter = partPropertyDescriptor.getWriteMethod(); Class
[] paramTypes = methodSetter.getParameterTypes(); String paramType = paramTypes[0].getName(); if(paramType.equals("javax.xml.bind.JAXBElement")){ if("String.class".equals(map.get(field))){ JAXBElement
eleString = new JAXBElement
(new QName( "http://bean.cxf.hs", field), String.class, fieldValue); methodSetter.invoke(obj, eleString); }else if("Integer.class".equals(map.get(field))){ JAXBElement
eleInteger = new JAXBElement
(new QName( "http://bean.cxf.hs", field), Integer.class, Integer.valueOf(fieldValue)); methodSetter.invoke(obj, eleInteger); }else if("Boolean.class".equals(map.get(field))){ JAXBElement
eleInteger = new JAXBElement
(new QName( "http://bean.cxf.hs", field), Boolean.class, Boolean.valueOf(fieldValue)); methodSetter.invoke(obj, eleInteger); } } } catch (Exception e) { e.printStackTrace(); } } public static void setFieldValue(Object obj, String field, List
> data ,ServiceInfo serviceinfo){ Object listObj =getFieldValue(obj,field); List
list = (List) listObj; String packageName=JAXBUtils.namespaceURIToPackage(serviceinfo.getName().getNamespaceURI()); try { Class LovValueIndexClass =Thread.currentThread().getContextClassLoader().loadClass(packageName+".LovValueIndex"); for (int i = 0; i < data.size(); i++) { Map
map = data.get(i); Object vi =LovValueIndexClass.newInstance(); setFieldValue(vi,"index",map.get("index")); setFieldValue(vi,"valueofPrompt",map.get("valueofPrompt")); list.add(vi); } } catch (Exception e) { e.printStackTrace(); } } public static Object getFieldValue(Object obj, String field) { Object reObj = null; Class
classs = obj.getClass(); try { PropertyDescriptor resultDescriptor = new PropertyDescriptor( field, classs); reObj = resultDescriptor.getReadMethod().invoke(obj); } catch (Exception e) { try { Method[] methods = classs.getDeclaredMethods(); for (int i = 0; i < methods.length; i++) { Method method = methods[i]; String name = method.getName(); if (name.replace("get","").toLowerCase().equals(field.toLowerCase())) { reObj = method.invoke(obj); } } } catch (Exception e1) { e1.printStackTrace(); } } return reObj; }}

  

转载于:https://my.oschina.net/sbcagf/blog/782951

你可能感兴趣的文章
仿制支付宝刮刮卡
查看>>
Xcode9 自动上传Fir
查看>>
JavaScript异步流程控制的前世今生
查看>>
通过static关键词来实现late static binding(静态调用绑定)
查看>>
Android小知识-OkHttp的两种请求方式
查看>>
使用Node.js开发REST APIs的10个最佳实践(翻译)
查看>>
目前传销和诈骗的虚拟货币有哪些?
查看>>
RxJava2源码分析(一):基本流程分析
查看>>
iOS两种颜色的线性渐变 --DDGBannerScrollView
查看>>
实战PHP数据结构基础之栈
查看>>
大数据与云计算的关系,Hadoop、Nosql如何参与其中?
查看>>
HTML5拖放的详解以及实例分享
查看>>
阿里巴巴前端工程师一面二面三面终面面经总结
查看>>
Python正则表达式初识(七)
查看>>
Cocos Creator踩坑日记(一)
查看>>
webpack之代码拆分
查看>>
.NET Core容器化@Docker
查看>>
(1)Linux性能调优之Linux进程管理
查看>>
每周一个 Python 模块 | operator
查看>>
【Android视图效果】仿QQ空间滑动改变标题栏颜色
查看>>