cxf 创建动态webService
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;
}
}
cxf 创建动态webService的更多相关文章
- 使用CXF创建REST WEBSERVICE
简单小结下CXF跟REST搭配webservice的做法,直接举代码为样例: 1 order.java package com.example.rest; import javax.xml.bin ...
- 用cxf创建webservice服务端
用cxf创建webservice 1:在eclipse里面创建动态web工程,注意,Dynamic web module version取2.5,3.0未测试过待验证: 2:下载cxf相关的jar包, ...
- CXF创建webservice客户端和服务端
转 一.CXF的介绍 Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成.C ...
- idea+maven+spring+cxf创建webservice应用(二)生成客户端程序
idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...
- 通过CXF方式实现webservice服务
一.CXF的介绍 Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构.它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 S ...
- C#动态webservice调用接口 (JAVA,C#)
C#动态webservice调用接口 using System; using System.Collections; using System.IO; using System.Net; using ...
- WebService系列二:使用JDK和CXF框架开发WebService
一.使用JDK开发WebService 服务端程序创建: 1.新建一个JDK开发webservice的服务端maven项目JDKWebServiceServer 2. 定义一个接口,使用@WebSer ...
- 开发基于CXF的 RESTful WebService web 项目 webservice发布
配置步骤 开发基于CXF的 RESTful WebService 1.创建Web项目并导入CXF的jar 2.在Web.xml中配置 CXFServlet <servlet> <se ...
- GifShot - 创建动态 GIF 的 JavaScript 库
GifShot 是一个可以创建流媒体,视频或图像的 GIF 动画的 JavaScript 库.该库的客户端特性使其非常便携,易于集成到几乎任何网站.利用最先进的浏览器 API ,包括 WebRTC , ...
随机推荐
- 隐藏服务器真实IP的方法来防止DDOS攻击
2017-08-22 作者:小唐 点击: 10,500次 在无盘系统的环境下,服务器软件存在漏洞,就容易受到DDOS攻击,隐藏服务器真实IP是解决问题最好的方法,下面小编与大家分享一下隐藏服务器真实I ...
- Powershell 远程管理
一直使用 mstsc,为了防止墨菲定律,准备一些备用方案 环境,win10 to win12 winrm是windows 一种方便远程管理的服务: 首先要开启winrm service,便于在日常工作 ...
- PS如何用制作BMP 256位色非压缩图片,供Easyboot作为背景
可以先把图片转换为gif格式,然后用Windows自带的画图工具打开,并另存为BMP格式的图片. 但是这样制作完成的图片失真相当严重 再如下面,简直无法不堪入目. 也可以使用PS.准备好图片之后点 ...
- C++003基础
1.C++对C的扩展 1简单的C++程序 1.1求圆的周长和面积 数据描写叙述: 半径.周长,面积均用实型数表示 数据处理: 输入半径 r. 计算周长 = 2*π*r : 计算面积 = π* r2 . ...
- UVA 111 (复习dp, 14.07.09)
History Grading Background Many problems in Computer Science involve maximizing some measure accor ...
- Transform.eulerAngles 欧拉角
var eulerAngles : Vector3 Description描述 The rotation as Euler angles in degrees. 旋转作为欧拉角度. The x, y, ...
- DBCC MEMORYSTATUS
内存管理器 输出的第一节是内存管理器.此部分将显示 SQL Server 的总内存消耗. Memory Manager KB ------------------------------ ------ ...
- Oracle基础 PL-SQL编程基础(2) 分支结构
一.分支结构 1.if语句 语法: IF <布尔表达式> THEN PL/SQL和SQL语句 END IF; 示例: DECLARE v_count NUMBER := &n; B ...
- CSS——如何清除浮动
众所周知,平时在写HTML代码时,难免少不了使用Float样式,这样一来,假使您没有清除浮动,那么有浮动元素的父元素容器将元素将无法自动撑开.换句简单好理解的话来说,假如你在写CODE时,其中div. ...
- Win10 导航窗口不能移动文件win10 资源管理器 无法拖动文件到左侧驱动器
Win10 导航窗口不能移动文件怎么办 Win10左侧导航栏不能移动文件怎么办 win10 资源管理器 无法拖动文件到左侧驱动器怎么办 在同一个文件夹可以拖动来移动文件,拖到地址栏的面包屑也可以移动文 ...