Search in sources :

Example 1 with XMLStreamBufferMark

use of com.sun.xml.stream.buffer.XMLStreamBufferMark in project metro-jax-ws by eclipse-ee4j.

the class StreamMessage method cacheHeaders.

private static XMLStreamBuffer cacheHeaders(XMLStreamReader reader, Map<String, String> namespaces, HeaderList headers, StreamHeaderDecoder headerDecoder) throws XMLStreamException {
    MutableXMLStreamBuffer buffer = createXMLStreamBuffer();
    StreamReaderBufferCreator creator = new StreamReaderBufferCreator();
    creator.setXMLStreamBuffer(buffer);
    // Reader is positioned at the first header block
    while (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT) {
        Map<String, String> headerBlockNamespaces = namespaces;
        // Collect namespaces on SOAP header block
        if (reader.getNamespaceCount() > 0) {
            headerBlockNamespaces = new HashMap<>(namespaces);
            for (int i = 0; i < reader.getNamespaceCount(); i++) {
                headerBlockNamespaces.put(reader.getNamespacePrefix(i), reader.getNamespaceURI(i));
            }
        }
        // Mark
        XMLStreamBuffer mark = new XMLStreamBufferMark(headerBlockNamespaces, creator);
        // Create Header
        headers.add(headerDecoder.decodeHeader(reader, mark));
        // Cache the header block
        // After caching Reader will be positioned at next header block or
        // the end of the </soap:header>
        creator.createElementFragment(reader, false);
        if (reader.getEventType() != XMLStreamConstants.START_ELEMENT && reader.getEventType() != XMLStreamConstants.END_ELEMENT) {
            XMLStreamReaderUtil.nextElementContent(reader);
        }
    }
    return buffer;
}
Also used : StreamReaderBufferCreator(com.sun.xml.stream.buffer.stax.StreamReaderBufferCreator) MutableXMLStreamBuffer(com.sun.xml.stream.buffer.MutableXMLStreamBuffer) MutableXMLStreamBuffer(com.sun.xml.stream.buffer.MutableXMLStreamBuffer) XMLStreamBuffer(com.sun.xml.stream.buffer.XMLStreamBuffer) XMLStreamBufferMark(com.sun.xml.stream.buffer.XMLStreamBufferMark)

Example 2 with XMLStreamBufferMark

use of com.sun.xml.stream.buffer.XMLStreamBufferMark in project metro-jax-ws by eclipse-ee4j.

the class RuntimeWSDLParser method parsePort.

private void parsePort(XMLStreamReader reader, EditableWSDLService service) {
    port_nsdecl.putAll(service_nsdecl);
    readNSDecl(port_nsdecl, reader);
    String portName = ParserUtil.getMandatoryNonEmptyAttribute(reader, WSDLConstants.ATTR_NAME);
    String binding = ParserUtil.getMandatoryNonEmptyAttribute(reader, "binding");
    QName bindingName = ParserUtil.getQName(reader, binding);
    QName portQName = new QName(service.getName().getNamespaceURI(), portName);
    EditableWSDLPort port = new WSDLPortImpl(reader, service, portQName, bindingName);
    extensionFacade.portAttributes(port, reader);
    String location;
    while (XMLStreamReaderUtil.nextElementContent(reader) != XMLStreamConstants.END_ELEMENT) {
        QName name = reader.getName();
        if (SOAPConstants.QNAME_ADDRESS.equals(name) || SOAPConstants.QNAME_SOAP12ADDRESS.equals(name)) {
            location = ParserUtil.getMandatoryNonEmptyAttribute(reader, WSDLConstants.ATTR_LOCATION);
            if (location != null) {
                try {
                    port.setAddress(new EndpointAddress(location));
                } catch (URISyntaxException e) {
                // Lets not throw any exception, latter on it should be thrown when invocation happens. At this
                // time user has option to set the endopint address using request contexxt property.
                }
            }
            XMLStreamReaderUtil.next(reader);
        } else if (AddressingVersion.W3C.nsUri.equals(name.getNamespaceURI()) && "EndpointReference".equals(name.getLocalPart())) {
            try {
                StreamReaderBufferCreator creator = new StreamReaderBufferCreator(new MutableXMLStreamBuffer());
                XMLStreamBuffer eprbuffer = new XMLStreamBufferMark(port_nsdecl, creator);
                creator.createElementFragment(reader, false);
                WSEndpointReference wsepr = new WSEndpointReference(eprbuffer, AddressingVersion.W3C);
                // wsepr.toSpec().writeTo(new StreamResult(System.out));
                port.setEPR(wsepr);
                /* XMLStreamBuffer.createNewBufferFromXMLStreamReader(reader) called from inside WSEndpointReference()
                       consumes the complete EPR infoset and moves to the next element. This breaks the normal wsdl parser
                       processing where it expects anyone reading the infoset to move to the end of the element that its reading
                       and not to the next element.
                     */
                if (reader.getEventType() == XMLStreamConstants.END_ELEMENT && reader.getName().equals(WSDLConstants.QNAME_PORT))
                    break;
            } catch (XMLStreamException e) {
                throw new WebServiceException(e);
            }
        } else {
            extensionFacade.portElements(port, reader);
        }
    }
    if (port.getAddress() == null) {
        try {
            port.setAddress(new EndpointAddress(""));
        } catch (URISyntaxException e) {
        // Lets not throw any exception, latter on it should be thrown when invocation happens. At this
        // time user has option to set the endopint address using request contexxt property.
        }
    }
    service.put(portQName, port);
    port_nsdecl = new HashMap<>();
}
Also used : StreamReaderBufferCreator(com.sun.xml.stream.buffer.stax.StreamReaderBufferCreator) WebServiceException(jakarta.xml.ws.WebServiceException) QName(javax.xml.namespace.QName) URISyntaxException(java.net.URISyntaxException) XMLStreamBufferMark(com.sun.xml.stream.buffer.XMLStreamBufferMark) MutableXMLStreamBuffer(com.sun.xml.stream.buffer.MutableXMLStreamBuffer) EditableWSDLPort(com.sun.xml.ws.api.model.wsdl.editable.EditableWSDLPort) WSEndpointReference(com.sun.xml.ws.api.addressing.WSEndpointReference) MutableXMLStreamBuffer(com.sun.xml.stream.buffer.MutableXMLStreamBuffer) XMLStreamBuffer(com.sun.xml.stream.buffer.XMLStreamBuffer) EndpointAddress(com.sun.xml.ws.api.EndpointAddress)

Aggregations

MutableXMLStreamBuffer (com.sun.xml.stream.buffer.MutableXMLStreamBuffer)2 XMLStreamBuffer (com.sun.xml.stream.buffer.XMLStreamBuffer)2 XMLStreamBufferMark (com.sun.xml.stream.buffer.XMLStreamBufferMark)2 StreamReaderBufferCreator (com.sun.xml.stream.buffer.stax.StreamReaderBufferCreator)2 EndpointAddress (com.sun.xml.ws.api.EndpointAddress)1 WSEndpointReference (com.sun.xml.ws.api.addressing.WSEndpointReference)1 EditableWSDLPort (com.sun.xml.ws.api.model.wsdl.editable.EditableWSDLPort)1 WebServiceException (jakarta.xml.ws.WebServiceException)1 URISyntaxException (java.net.URISyntaxException)1 QName (javax.xml.namespace.QName)1