动态客户端WSDL

时间:2012-10-22 06:41:17

标签: wsdl uddi

我是网络服务的新手。我的要求是WSDL链接

  1. 我想动态查找所有支持的操作(方法 由WSDL出版)
  2. 迭代列出的不同操作
  3. 动态获取参数列表并返回每个操作的值
  4. 在获取Operation Name,Param和return
  5. 的详细信息后动态使用服务

    我能够编写一个动态客户端应用程序(Axis 2,WSDL4J),它将使用WSDL并给出方法Name,为方法定义的参数,数据类型等。 我已经创建了一个应用程序,它接受了WSDL并向我提供了WSDL中存在的所有方法。

    Definition def = reader.readWSDL(null, wsdlURI);
    Map services = def.getServices();
    // Services when Iterated will give all the Method Names 
    // .......
    Operation operation = boperation.getOperation();
    String OperationName = operation.getName();
    System.out.println("OperationName :" + OperationName.toString());
    

    除此之外,我不确定如何动态获取给定方法的参数名称。 任何示例代码/教程都非常感谢

    附上客户的完整代码。

        public class DynamicInvoke {
    
        public static void main(String[] args) throws WSDLException {
    
            String wsdlURI = "WORKING_WSDL_LINK";
            DynamicInvoke di = new DynamicInvoke();
            List wsdlList = new ArrayList();
    
            wsdlList = di.buildComponents(wsdlURI);
    
        }
    
        public List buildComponents(String wsdlURI) throws WSDLException {
            // The list of components that will be returned
            List serviceList = Collections.synchronizedList(new ArrayList());
    
            // Create the WSDL Reader object
            WSDLFactory factory = WSDLFactory.newInstance();
            WSDLReader reader = factory.newWSDLReader();
    
            try {
                // Read the WSDL and get the top-level Definition object
                Definition def = reader.readWSDL(null, wsdlURI);
    
                java.util.Map<QName, Service> services = null;
                // Get the services defined in the document
                try {
                    services = def.getServices();
                } catch (Exception e) {
                    System.out.println("Cast Exception " + e.getMessage());
                }
    
                if (services != null) {
                    // Create a component for each service defined
                    Iterator serviceIter = (services).values().iterator();
    
                    for (int i = 0; serviceIter.hasNext(); i++) {
                        // Create a new ServiceInfo component for each service found
                        ServiceInfo serviceInfo = new ServiceInfo();
    
                        // Populate the new component from the WSDL Definition read
                        populateComponent(serviceInfo, (Service) serviceIter.next());
    
                        // Add the new component to the List to be returned
                        serviceList.add(serviceInfo);
                    }
                }
            }
    
            catch (Throwable t) {
                // Process the error/exception
                System.err.println(t.getMessage());
            }
    
            // return the List of services we created
            return serviceList;
        }
    
    
        private ServiceInfo populateComponent(ServiceInfo component, Service service)
                throws WSDLException {
            // Get the qualified service name information
            QName qName = service.getQName();
    
            // Get the service's namespace URI
            String namespace = qName.getNamespaceURI();
    
            // Use the local part of the qualified name for the component's name
            String name = qName.getLocalPart();
    
            // Get the defined ports for this service
            Map ports = service.getPorts();
    
            // Use the Ports to create methods for all request/response messages
            // defined
            Iterator portIter = ports.values().iterator();
    
    
    
            while (portIter.hasNext()) {
                // Get the next defined port
                Port port = (Port) portIter.next();
    
                // Get the Port's Binding
                javax.wsdl.Binding binding = port.getBinding();
    
                // Now we will create operations from the Binding information
                List operations = buildOperations(binding);
    
                // Process methods built from the binding information
                Iterator operIter = operations.iterator();
    
                while (operIter.hasNext()) {
                    BindingOperation boperation = (BindingOperation) operIter.next();
                    Operation operation = boperation.getOperation();
    
                    // Get all the QName,Port Name,Name Space, WebService Name...
                    System.out.println("Port Name =" + port.getName());
                    System.out.println("QName = " + qName.toString());
                    System.out.println("Namespace = " + namespace.toString());
                    System.out.println("WebService Name = " + name.toString());
    
                    // Get All the Method Name...
                    String OperationName = operation.getName();
                    System.out.println("OperationName :" + OperationName.toString());
    
                    Input inDef = operation.getInput();
                    String ParamName = inDef.getName();
                    System.out.println("inDef--->" + ParamName);
                    Message inMessage = inDef.getMessage();
                    Map parts = inMessage.getParts();
    
    
                    System.out.print("\nAxis parameters gathered:\nTargetNamespace = " +"\n"+
                            "Service Name = "+namespace.toString() +"\n"+
                            "Port Name = "+port.getName() +"\n"+
                            "Operation Name = "+operation.getName()+"\n"+
                            "Input Parameters = ");
    
    
    
                }
            }
    
            return component;
        }
    
        private List buildOperations(Binding binding) {
            // TODO Auto-generated method stub
    
            List list = binding.getBindingOperations();
    
            System.out.println("Bindings :" + list);
            return list;
    
        }
    
    }
    

1 个答案:

答案 0 :(得分:0)

您需要使用wsdl2java-tool(使用axis2-zip打包)从给定的WSDL编译存根代码。 然后,您将找到与您的Web服务相关的类,包括为您准备的所有方法,参数。

有关示例,请参阅Step 5 here