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

  • 相关阅读:
    javaweb消息中间件——rabbitmq入门
    virtual box 桥接模式(bridge adapter)下无法获取ip(determine ip failed)的解决方法
    Apache Kylin本地启动
    git操作
    Java学习总结
    Java中同步的几种实现方式
    hibernate exception nested transactions not supported 解决方法
    vue 中解决移动端使用 js sdk 在ios 上一直报invalid signature 的问题解决
    cookie 的使用
    vue 专门为了解决修改微信标题而生的项目
  • 原文地址:https://www.cnblogs.com/ailiying/p/12401574.html
Copyright © 2011-2022 走看看