• cxf 创建动态webService


    D:developToolsapache-cxf-2.5.2sampleswsdl_first_dynamic_client
    CXF 方法 cxf方法
    serviceInfo.getBindings()  BindingInfo--[BindingInfo http://schemas.xmlsoap.org/wsdl/soap/]
    serviceInfo.getDocumentation()  WS_0917_05
    
    package 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<EndpointInfo> ends =   serviceInfo.getEndpoints();
              Iterator<EndpointInfo> 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<String,Object> properies= serviceInfo.getProperties();
                System.out.println(properies.size());
                for (String key : properies.keySet() ) {
     System.out.println("key--"+key+ "-----" + properies.get(key).toString());
     }
                 Set<QName> qSet=serviceInfo.getMessages().keySet();
                 Iterator<QName> 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<MessagePartInfo> 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<Map<String,String>> listdate = new ArrayList<Map<String,String>>();
                  Map<String,String> map = new HashMap<String, String>();
                  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<List<Object>> RElist = new ArrayList<List<Object>>();
                for (int i =0; i<list.size();i++) {
                 Object row = list.get(i);
                 Object rowValues = ReflectUtil.getFieldValue(row, "cell") ;
    //             List<Object> rowObjs = (List<Object>) rowValues;
    //             for (int j = 0; j < rowObjs.size(); j++) {
    // System.out.println(rowObjs.get(j));
    //             }
                 RElist.add((List<Object>) 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<String,String> map = new HashMap<String, String>();
    
    
     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<String> eleString = new JAXBElement<String>(new QName(
                             "http://bean.cxf.hs", field), String.class, fieldValue);
      methodSetter.invoke(obj, eleString);
     }else if("Integer.class".equals(map.get(field))){
     JAXBElement<Integer> eleInteger = new JAXBElement<Integer>(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<Boolean> eleInteger = new JAXBElement<Boolean>(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<Map<String,String>> data ,ServiceInfo serviceinfo){
     Object listObj =getFieldValue(obj,field);
     List<Object>  list = (List<Object>) 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<String,String> 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;
     }
    }
    

      

  • 相关阅读:
    古老当时兴
    购买代购的产品算违法吗——看空姐代购被判刑有感
    七种方法让你的网站在搜索结果中突围而出(中)
    amf webgame
    游戏开发协议(转)
    array的排序
    用 javascript + actionScript 解决透明的flash在firefox下滚轮失效的问题!(转)
    知乎摘 励志回答
    ie:stagewidth,stageheight的bug
    jsfl bug解决
  • 原文地址:https://www.cnblogs.com/clds/p/4918764.html
Copyright © 2020-2023  润新知