예제 #1
0
 private static void writeWsdl(StreamWriterBufferCreator writer, QName service, String wsdlAddress)
     throws XMLStreamException {
   // Inline-wsdl
   writer.writeStartElement(
       WSDLConstants.PREFIX_NS_WSDL,
       WSDLConstants.QNAME_DEFINITIONS.getLocalPart(),
       WSDLConstants.NS_WSDL);
   writer.writeNamespace(WSDLConstants.PREFIX_NS_WSDL, WSDLConstants.NS_WSDL);
   writer.writeStartElement(
       WSDLConstants.PREFIX_NS_WSDL,
       WSDLConstants.QNAME_IMPORT.getLocalPart(),
       WSDLConstants.NS_WSDL);
   writer.writeAttribute("namespace", service.getNamespaceURI());
   writer.writeAttribute("location", wsdlAddress);
   writer.writeEndElement();
   writer.writeEndElement();
 }
예제 #2
0
    /** Parses the Metadata section of the EPR. */
    private void parseMetaData() throws XMLStreamException {
      StreamReaderBufferProcessor xsr = infoset.readAsXMLStreamReader();

      // parser should be either at the start element or the start document
      if (xsr.getEventType() == XMLStreamReader.START_DOCUMENT) xsr.nextTag();
      assert xsr.getEventType() == XMLStreamReader.START_ELEMENT;
      String rootElement = xsr.getLocalName();
      if (!xsr.getNamespaceURI().equals(version.nsUri))
        throw new WebServiceException(
            AddressingMessages.WRONG_ADDRESSING_VERSION(version.nsUri, xsr.getNamespaceURI()));
      String localName;
      String ns;
      if (version == AddressingVersion.W3C) {
        do {
          // If the current element is metadata enclosure, look inside
          if (xsr.getLocalName().equals(version.eprType.wsdlMetadata.getLocalPart())) {
            String wsdlLoc =
                xsr.getAttributeValue("http://www.w3.org/ns/wsdl-instance", "wsdlLocation");
            if (wsdlLoc != null) wsdliLocation = wsdlLoc.trim();
            XMLStreamBuffer mark;
            while ((mark = xsr.nextTagAndMark()) != null) {
              localName = xsr.getLocalName();
              ns = xsr.getNamespaceURI();
              if (localName.equals(version.eprType.serviceName)) {
                String portStr = xsr.getAttributeValue(null, version.eprType.portName);
                if (serviceName != null)
                  throw new RuntimeException(
                      "More than one " + version.eprType.serviceName + " element in EPR Metadata");
                serviceName = getElementTextAsQName(xsr);
                if (serviceName != null && portStr != null)
                  portName = new QName(serviceName.getNamespaceURI(), portStr);
              } else if (localName.equals(version.eprType.portTypeName)) {
                if (portTypeName != null)
                  throw new RuntimeException(
                      "More than one " + version.eprType.portTypeName + " element in EPR Metadata");
                portTypeName = getElementTextAsQName(xsr);
              } else if (ns.equals(WSDLConstants.NS_WSDL)
                  && localName.equals(WSDLConstants.QNAME_DEFINITIONS.getLocalPart())) {
                wsdlSource = new XMLStreamBufferSource(mark);
              } else {
                XMLStreamReaderUtil.skipElement(xsr);
              }
            }
          } else {
            // Skip is it is not root element
            if (!xsr.getLocalName().equals(rootElement)) XMLStreamReaderUtil.skipElement(xsr);
          }
        } while (XMLStreamReaderUtil.nextElementContent(xsr) == XMLStreamReader.START_ELEMENT);
      } else if (version == AddressingVersion.MEMBER) {
        do {
          localName = xsr.getLocalName();
          ns = xsr.getNamespaceURI();
          // If the current element is metadata enclosure, look inside
          if (localName.equals(version.eprType.wsdlMetadata.getLocalPart())
              && ns.equals(version.eprType.wsdlMetadata.getNamespaceURI())) {
            while (xsr.nextTag() == XMLStreamReader.START_ELEMENT) {
              XMLStreamBuffer mark;
              while ((mark = xsr.nextTagAndMark()) != null) {
                localName = xsr.getLocalName();
                ns = xsr.getNamespaceURI();
                if (ns.equals(WSDLConstants.NS_WSDL)
                    && localName.equals(WSDLConstants.QNAME_DEFINITIONS.getLocalPart())) {
                  wsdlSource = new XMLStreamBufferSource(mark);
                } else {
                  XMLStreamReaderUtil.skipElement(xsr);
                }
              }
            }
          } else if (localName.equals(version.eprType.serviceName)) {
            String portStr = xsr.getAttributeValue(null, version.eprType.portName);
            serviceName = getElementTextAsQName(xsr);
            if (serviceName != null && portStr != null)
              portName = new QName(serviceName.getNamespaceURI(), portStr);
          } else if (localName.equals(version.eprType.portTypeName)) {
            portTypeName = getElementTextAsQName(xsr);
          } else {
            // Skip is it is not root element
            if (!xsr.getLocalName().equals(rootElement)) XMLStreamReaderUtil.skipElement(xsr);
          }
        } while (XMLStreamReaderUtil.nextElementContent(xsr) == XMLStreamReader.START_ELEMENT);
      }
    }