zoukankan      html  css  js  c++  java
  • cxf 工具类转载

    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;
    }
    }

  • 相关阅读:
    Linux文件系统的设计
    HTML中Select的使用具体解释
    【大话设计模式】—— 工厂方法模式
    C++ Primer 学习笔记_84_模板与泛型编程 --模板特化
    Arcgis API for Android之GPS定位
    “大型票务系统”中对机器恶意訪问的处理——验证码
    hdu 4611
    Java实现 蓝桥杯VIP 算法训练 ALGO-85进制转换
    Java实现 蓝桥杯VIP 算法训练 摆动序列
    Java实现 蓝桥杯VIP 算法训练 摆动序列
  • 原文地址:https://www.cnblogs.com/ailiying/p/12401574.html
Copyright © 2011-2022 走看看