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 ends = serviceInfo.getEndpoints();
Iterator 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 properies= serviceInfo.getProperties();
System.out.println(properies.size());
for (String key : properies.keySet() ) {
System.out.println("key--"+key+ "-----" + properies.get(key).toString());
}
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----" +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 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