Ejemplo n.º 1
0
  private Element parseMetadata(
      @NotNull String systemId, @NotNull ServiceDescriptor serviceDescriptor) {
    List<? extends Source> mexWsdls = serviceDescriptor.getWSDLs();
    List<? extends Source> mexSchemas = serviceDescriptor.getSchemas();
    Document root = null;
    for (Source src : mexWsdls) {
      if (src instanceof DOMSource) {
        Node n = ((DOMSource) src).getNode();
        Document doc;
        if (n.getNodeType() == Node.ELEMENT_NODE && n.getOwnerDocument() == null) {
          doc = DOMUtil.createDom();
          doc.importNode(n, true);
        } else {
          doc = n.getOwnerDocument();
        }

        //                Element e = (n.getNodeType() == Node.ELEMENT_NODE)?(Element)n:
        // DOMUtil.getFirstElementChild(n);
        if (root == null) {
          // check if its main wsdl, then set it to root
          NodeList nl =
              doc.getDocumentElement().getElementsByTagNameNS(WSDLConstants.NS_WSDL, "service");
          if (nl.getLength() > 0) {
            root = doc;
            rootWSDL = src.getSystemId();
          }
        }
        NodeList nl =
            doc.getDocumentElement().getElementsByTagNameNS(WSDLConstants.NS_WSDL, "import");
        for (int i = 0; i < nl.getLength(); i++) {
          Element imp = (Element) nl.item(i);
          String loc = imp.getAttribute("location");
          if (loc != null) {
            if (!externalReferences.contains(loc)) externalReferences.add(loc);
          }
        }
        if (core.keySet().contains(systemId)) core.remove(systemId);
        core.put(src.getSystemId(), doc);
        resolvedCache.put(systemId, doc.getDocumentURI());
        isMexMetadata = true;
      }

      // TODO:handle SAXSource
      // TODO:handler StreamSource
    }

    for (Source src : mexSchemas) {
      if (src instanceof DOMSource) {
        Node n = ((DOMSource) src).getNode();
        Element e =
            (n.getNodeType() == Node.ELEMENT_NODE) ? (Element) n : DOMUtil.getFirstElementChild(n);
        inlinedSchemaElements.add(e);
      }
      // TODO:handle SAXSource
      // TODO:handler StreamSource
    }
    return root.getDocumentElement();
  }