CXF动态配置webservice访问数据库,并在客户端实现动态调用

动态配置webservice访问数据库,使用cxf2.6+spring3+mybatis3+struts2,使用jedis作为缓存服务器,配置格式与传输格式为json,仅供参考学习.

并在客户端实现动态调用

csdn太垃圾了上传了就不能修改

最新源码地址 https://github.com/wu1g119

package test.cxf;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Set;

import javax.xml.namespace.QName;

import org.apache.cxf.common.jaxb.JAXBUtils;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.service.model.ServiceInfo;

public class TestDynamicClient {
	public static void main(String[] args) throws Exception {
		// 动态客户端
		JaxWsDynamicClientFactory dynamicClient = JaxWsDynamicClientFactory
				.newInstance();
		// wsdl
		String wsdl = "http://localhost/services/webxml?wsdl";
		// 创建客户端
		Client client = dynamicClient.createClient(wsdl);
//		//-------------打印生成的代理类---与类的属性方法------
//		ServiceInfo serviceInfo=client.getEndpoint().getService().getServiceInfos().get(0);
//			Set qSet=serviceInfo.getMessages().keySet();
//			Iterator 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);
//				//加载类
//				Object objArgs = Thread.currentThread().getContextClassLoader().loadClass(packageName+"."+className).newInstance();
//				//获取类的全部属性
//				Field[] fields=objArgs.getClass().getDeclaredFields();
//				for(Field f:fields){
//					System.out.println("\t属性="+f.getName());
//				}
//				System.out.println("\t--------------------");
//				Method[] methods=objArgs.getClass().getDeclaredMethods();
//				for(Method m:methods){
//					System.out.println("\t方法="+m.getName());
//				}
//				
//			}
		// ----------访问getInfo接口------------
		try {
			// 调用接口getInfo
			Object[] objArr1 = client.invoke("getInfo","{\"system\": \"test001\", \"pageSize\": \"1\", \"pageNum\": \"1\", \"serviceName\": \"news_list\"}");
			// 输出接口值
			System.out.println(objArr1[0]);

//			/* 例子2
//			 * 参数为对象 
//			 * eg. getInfo(String info,XX xx) 
//			 * 
//			 */
//			//创建xx对象
//			Object objArgs = Thread.currentThread().getContextClassLoader()
//					.loadClass("cn.com.softvan.cxf.XX").newInstance();
//			//为xx对象xx1属性赋值
//			Method xx1 = objArgs.getClass().getMethod("setXX1",String.class);
//			xx1.invoke(objArgs,"1");
//			//为xx对象xx2属性赋值
//			Method xx2 = objArgs.getClass().getMethod("setXX2",String.class);
//			xx2.invoke(objArgs,"2");
//			//传入值获取返回值
//			Object[] objArr2=client.invoke("getInfo",new Object[]{"第一个参数信息",objArgs});
//			//返回第一个信息
//			System.out.println(objArr2[0]);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

你可能感兴趣的:(CXF)