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(); }
/** 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); } }