文档章节

cxf 创建动态webService

穿林度水
 穿林度水
发布于 2016/11/07 14:27
字数 868
阅读 35
收藏 0
D:\developTools\apache-cxf-2.5.2\samples\wsdl_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;
 }
}

  

© 著作权归作者所有

穿林度水
粉丝 0
博文 250
码字总数 167120
作品 0
海淀
程序员
私信 提问
Apache CXF 和 Spring 开发 Web Service 1

正文 为什么使用CXF 本文段摘录自 http://www.ibm.com/developerworks/cn/webservices/ws-pojo-springcxf/index.html Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务...

洋葱94
2015/12/04
272
0
bboss发布apache cxf 2.7.6服务和定义客户端服务实例可能产生冲突解决办法

bboss发布apache cxf 2.7.6服务和定义客户端服务实例放到一起可能会产生冲突并导致服务发布失败,本文介绍这个冲突的解决办法。 首先介绍一下冲突现象,假设在bboss mvc的xml配置文件中定义一...

bboss
2014/03/22
0
0
CXF创建webservice客户端和服务端

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本人声明。否则将追究法律责任。 作者:永恒の☆ 地址:http://blog.csdn.net/chenghui0317/article/details/9...

kt431128
2014/10/03
246
0
CXF、Axis2 怎么实现相互调用???

关于webservice的软件有很多,这里只讨论cxf、Axis2这两种。(鄙人有个疑惑,求证实:由于cxf对spring框架支持的很好,而且操作起来也最简单,所以搞java的同学都选择cxf;但是,用.Net的同学...

追风少年8090
2013/01/09
10K
5
spring+restful service

Spring整合CXF,发布RSETful 风格WebService 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的。关于发布CXF WebServer和Spring整合CXF这里就不再多加赘述...

游宵
2014/04/25
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

Vue学习01

我的github地址https://github.com/zhangl-w/VueDemo/tree/master/VueDemo 一、基本代码 1.导入Vue包,导包后浏览器内存中会产生一个Vue的构造函数 2.创建一个Vue实例 3.el 表示,当前我们n...

zhang_l
28分钟前
5
0
centos7.x 安装harbor 1.9.3

首先必须安装docker和docker-compose 推荐使用pip安装docker-compose,因为pip可以为你自动对应版本问题 1.docker安装 curl -sfL https://get.docker.io | sh -systemctl start docker 2.d...

Elson
28分钟前
5
0
每天积累一点:射频阻抗

对我来说,阻抗是一个非常令人困惑的概念(术语)。以下是我第一次学习阻抗概念时脑海中出现的许多问题。同样的问题也让你烦恼吗? 当我第一次在高中物理中学习“电阻(Resistance )”时,它...

demyar
30分钟前
5
0
人生苦短?试试Groovy进行单元测试

如果您今天正在编程,那么您很可能听说过单元测试或测试驱动的开发过程。我还没有遇到一个既没有听说过又没有听说过单元测试并不重要的程序员。在随意的讨论中,大多数程序员似乎认为单元测试...

八音弦
31分钟前
4
0
GMAT词汇怎么背?简单记忆法让你不再害怕背单词

GMAT考试对于词汇的掌握和使用要求高,可以说是GMAT考试的难关之一。面对学术化专业化难度颇高的词汇,考生难免会产生畏惧退缩的情绪。GMAT难词怎么背?有没有轻松背单词的方法呢?下面小编就为...

bole6
33分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部