文章标题

  1. 主函数
public static void main(String[] args) {
        String wsdlURI="D:/eclips/testSoftware/test9/Test/testExample.wsdl";
        try {
            WSDLParser wsdlParse = new WSDLParser();
            //解析wsdl
            wsdlParse.parseWSDL(wsdlURI);
        } catch (WSDLException e1) {
            e1.printStackTrace();
        } 
    }

2.解析wsdl

public void parseWSDL(String wsdlURI) throws WSDLException {
        WSDLFactory wsdlFactory = WSDLFactory.newInstance();
        WSDLReader reader = wsdlFactory.newWSDLReader();
        Definition defintion = reader.readWSDL(wsdlURI);
        System.out.println("targetNamespace = "+defintion.getTargetNamespace());
        processTypes(defintion);

        Map servicesMap = defintion.getAllServices();
        Set serviceKeys = servicesMap.keySet();
        for (Iterator iterator = serviceKeys.iterator(); iterator.hasNext();) {
            Object key = (Object) iterator.next();
            ServiceImpl service = (ServiceImpl)servicesMap.get(key);
            //解析服务
            processService(service);
        }
    }

3.processService(service)解析服务

public void processService(ServiceImpl service) {
        System.out.println("Service信息如下:");
        String serviceName = service.getQName().getLocalPart();
        ServiceInfo serviceInfo = new ServiceInfo();
        serviceInfo.setName(serviceName);
        services.add(serviceInfo);
        System.out.println("serviceName = "+serviceName);

        Collection ports = service.getPorts().values();
        for (Iterator iterator = ports.iterator(); iterator.hasNext();) {
            Port port = (Port) iterator.next();
            Binding binding = port.getBinding();
            System.out.println("portName = "+port.getName());
            System.out.println("bindingName = "+binding.getQName().getLocalPart());

            System.out.println("nService location:");  
            List l=port.getExtensibilityElements();  
            ExtensibilityElement element=(ExtensibilityElement) l.get(0);  
            String s=element.toString();  
            System.out.println(s.substring(s.indexOf("location")));  

            List operations = binding.getBindingOperations();
            for (Iterator iterator2 = operations.iterator(); iterator2.hasNext();) {
                BindingOperation bindingOperation = (BindingOperation) iterator2.next();
                Operation operation = bindingOperation.getOperation();
                //处理操作
                processOperation(serviceInfo,operation);
            }
        }
    }

4.processOperation(serviceInfo,operation)处理操作信息

public void processOperation(ServiceInfo serviceInfo, Operation operation) {
        String operationName = operation.getName();
        OperationInfo operationInfo = new OperationInfo();
        operationInfo.setOperationName(operationName);
        System.out.println("operationName = "+operationName);

        if (!containOperation(serviceInfo, operationInfo)) {
            serviceInfo.addOperation(operationInfo);
        }

        Input input = operation.getInput();
        System.out.println("输入参数信息:");
        processInputOrOutputParam(operationInfo,input,null);
        Output output = operation.getOutput();
        System.out.println("输出参数信息:");
        processInputOrOutputParam(operationInfo,null,output);

    }

5.processInputOrOutputParam(operationInfo,input,null);输入输出参数处理

public void processInputOrOutputParam(OperationInfo operationInfo,  Input input,Output output) {
        List inputParams = operationInfo.getInputParams();
        Message message;
        if(input != null ){      
            message = input.getMessage();
        }else{ 
            message = output.getMessage();
        }

        String messageName = message.getQName().getLocalPart();
        System.out.println("messageName = "+ messageName);

        Map partMap = message.getParts();
        Collection parts = partMap.values();
        for (Iterator iterator = parts.iterator(); iterator.hasNext();) {
            Part part = (Part) iterator.next();
            String partName = part.getName();
            System.out.println("partName = "+ partName);
            ParameterInfo parameterInfo = new ParameterInfo();
            parameterInfo.setName(partName);
            inputParams.add(parameterInfo);
            String typeName = null;
            QName qName = part.getTypeName();
            if (qName != null) {
                typeName = qName.getLocalPart();
                System.out.println("typeName = "+typeName);
                //TODO complex type;
            } else {
                typeName = part.getElementName().getLocalPart();
                System.out.println("ElementName = "+typeName);
                //TODO process element.
            }       
            parameterInfo.setType(typeName);
        }
    }

6.processTypes(defintion);处理types信息

public void processTypes(Definition defintion) {
        XmlSchemaCollection xmlSchemaCollection = new XmlSchemaCollection();
        Map namespaces = defintion.getNamespaces();

        Types types = defintion.getTypes();
        List list = types.getExtensibilityElements();
        types.getDocumentationElement();
        for (Iterator iterator = list.iterator(); iterator.hasNext();) {
            SchemaImpl schemaImpl = (SchemaImpl) iterator.next();
            Element element = (Element)schemaImpl.getElement();
            XmlSchema xmlSchema = xmlSchemaCollection.read(element);
            String targetNamespace = xmlSchema.getTargetNamespace();

            XmlSchemaObjectTable smlSchemaObjectTable = xmlSchema.getSchemaTypes();
            XmlSchemaObjectTable elements = xmlSchema.getElements();

            System.out.println();
            System.out.println(smlSchemaObjectTable);
            System.out.println();

            Iterator typesItr = smlSchemaObjectTable.getValues();
            //Iterator typesItr = elements.getValues();
            while (typesItr.hasNext()) {
                System.out.println("执行到while了!");
                //XmlSchemaType type = (XmlSchemaType) typesItr.next();
                XmlSchemaType type = (XmlSchemaType) typesItr;
                //EntityClass entityClass = new EntityClass();
                //entityClasses.add(entityClass);
                String typeName = type.getName();
                if (type instanceof XmlSchemaComplexType) {
                    XmlSchemaComplexType xmlSchemaComplexType = (XmlSchemaComplexType) type;
                    XmlSchemaParticle xmlSchemaParticle = xmlSchemaComplexType.getParticle();
                    if (xmlSchemaParticle instanceof XmlSchemaSequence) {
                        XmlSchemaSequence xmlSchemaSequence = (XmlSchemaSequence) xmlSchemaParticle;
                        XmlSchemaObjectCollection xmlSchemaObjectCollection = xmlSchemaSequence.getItems();
                        int count = xmlSchemaObjectCollection.getCount();
                        for (int i = 0; i < count; i++) {
                            XmlSchemaObject xmlSchemaObject = xmlSchemaObjectCollection.getItem(i);
                            if (xmlSchemaObject instanceof XmlSchemaElement) {
                                XmlSchemaElement xmlSchemaElement = (XmlSchemaElement)xmlSchemaObject;
                                String elementName = xmlSchemaElement.getName();
                                XmlSchemaType xmlSchemaType = xmlSchemaElement.getSchemaType();
                                String elementTypeName = xmlSchemaType.getName();
                                if (xmlSchemaType instanceof XmlSchemaComplexType) {
                                    // TODO
                                }
                            }
                        }
                    }
                } 

                System.out.println("type:" + type);
            }
        }
    }

注:处理types信息,这里有个问题是,smlSchemaObjectTable好像并没有获取到数据,这是问题所在,正在调试。请见下篇博客,分解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值