Example usage for javax.xml.soap SOAPEnvelope getNamespacePrefixes

List of usage examples for javax.xml.soap SOAPEnvelope getNamespacePrefixes

Introduction

In this page you can find the example usage for javax.xml.soap SOAPEnvelope getNamespacePrefixes.

Prototype

public Iterator<String> getNamespacePrefixes();

Source Link

Document

Returns an Iterator over the namespace prefix String s declared by this element.

Usage

From source file:Main.java

private static HashMap<String, String> getNamespaceDeclarations(SOAPEnvelope env, SOAPBodyElement body) {
    HashMap<String, String> namespaceDeclarations = new HashMap<String, String>();
    @SuppressWarnings("rawtypes")
    Iterator nss = env.getNamespacePrefixes();
    // Retrieve all namespace declarations from SOAP-ENV node
    while (nss.hasNext()) {
        String prefix = (String) nss.next();
        String uri = env.getNamespaceURI(prefix);
        // filter out SOAP-ENV namespace, since it is not interesting to us
        if (!uri.startsWith("http://schemas.xmlsoap.org/soap/envelope")) {
            namespaceDeclarations.put(prefix, uri);
        }//from   www . j a v  a 2  s  .c om
    }
    // Retrieve all namespace declarations from SOAP-BODY node
    nss = body.getNamespacePrefixes();
    while (nss.hasNext()) {
        String prefix = (String) nss.next();
        String uri = env.getNamespaceURI(prefix);
        namespaceDeclarations.put(prefix, uri);
    }
    return namespaceDeclarations;
}

From source file:ee.ria.xroad.common.message.SoapUtils.java

/**
        //ww w .j a  va2 s  .c o m
 * Returns namespace URIs from a SOAPMessage.
 * @param soap soap message from which to retrieve namespace URIs
 * @return a List of namespace URI Strings
 * @throws Exception if there is a SOAP error
 */
public static List<String> getNamespaceURIs(SOAPMessage soap) throws Exception {
    List<String> nsURIs = new ArrayList<>();

    SOAPEnvelope envelope = soap.getSOAPPart().getEnvelope();
    Iterator<?> it = envelope.getNamespacePrefixes();
    while (it.hasNext()) {
        nsURIs.add(envelope.getNamespaceURI((String) it.next()));
    }

    return nsURIs;
}

From source file:com.nortal.jroad.endpoint.AbstractXTeeBaseEndpoint.java

@SuppressWarnings("unchecked")
private XRoadProtocolVersion parseProtocolVersion(SOAPMessage requestMessage) throws SOAPException {
    XRoadProtocolVersion version = null;
    // Extract protocol version by headers
    if (requestMessage.getSOAPHeader() != null) {
        NodeList reqHeaders = requestMessage.getSOAPHeader().getChildNodes();
        for (int i = 0; i < reqHeaders.getLength(); i++) {
            Node reqHeader = reqHeaders.item(i);
            if (reqHeader.getNodeType() != Node.ELEMENT_NODE
                    || !reqHeader.getLocalName().equals(XTeeHeader.PROTOCOL_VERSION.getLocalPart())) {
                continue;
            }// w  ww .j av  a2  s .c  o  m

            if ((version = XRoadProtocolVersion
                    .getValueByVersionCode(SOAPUtil.getTextContent(reqHeader))) != null) {
                return version;
            }
        }
    }

    // Extract protocol version by namespaces
    SOAPEnvelope soapEnv = requestMessage.getSOAPPart().getEnvelope();
    Iterator<String> prefixes = soapEnv.getNamespacePrefixes();
    while (prefixes.hasNext()) {
        String nsPrefix = (String) prefixes.next();
        String nsURI = soapEnv.getNamespaceURI(nsPrefix).toLowerCase();
        if ((version = XRoadProtocolVersion.getValueByNamespaceURI(nsURI)) != null) {
            return version;
        }
    }
    throw new IllegalStateException("Unsupported protocol version");
}

From source file:be.agiv.security.handler.WSAddressingHandler.java

private String getUniquePrefix(String preferredPrefix, SOAPEnvelope envelope) {
    int suffixNr = 0;
    boolean conflict;
    String prefix = preferredPrefix;
    do {//from w w  w. j a v a2s  . c om
        conflict = false;
        Iterator namespacePrefixesIter = envelope.getNamespacePrefixes();
        while (namespacePrefixesIter.hasNext()) {
            String existingPrefix = (String) namespacePrefixesIter.next();
            if (prefix.equals(existingPrefix)) {
                conflict = true;
                break;
            }
        }
        if (conflict) {
            suffixNr++;
            prefix = preferredPrefix + suffixNr;
        }
    } while (conflict);
    return prefix;
}

From source file:be.agiv.security.handler.WSAddressingHandler.java

private void handleOutboundMessage(SOAPMessageContext context) throws SOAPException {
    LOG.debug("adding WS-Addressing headers");
    SOAPEnvelope envelope = context.getMessage().getSOAPPart().getEnvelope();
    SOAPHeader header = envelope.getHeader();
    if (null == header) {
        header = envelope.addHeader();//from  ww w . ja  v a2  s .  c om
    }

    String wsuPrefix = null;
    String wsAddrPrefix = null;
    Iterator namespacePrefixesIter = envelope.getNamespacePrefixes();
    while (namespacePrefixesIter.hasNext()) {
        String namespacePrefix = (String) namespacePrefixesIter.next();
        String namespace = envelope.getNamespaceURI(namespacePrefix);
        if (WSConstants.WS_ADDR_NAMESPACE.equals(namespace)) {
            wsAddrPrefix = namespacePrefix;
        } else if (WSConstants.WS_SECURITY_UTILITY_NAMESPACE.equals(namespace)) {
            wsuPrefix = namespacePrefix;
        }
    }
    if (null == wsAddrPrefix) {
        wsAddrPrefix = getUniquePrefix("a", envelope);
        envelope.addNamespaceDeclaration(wsAddrPrefix, WSConstants.WS_ADDR_NAMESPACE);
    }
    if (null == wsuPrefix) {
        /*
         * Using "wsu" is very important for the IP-STS X509 credential.
         * Apparently the STS refuses when the namespace prefix of the
         * wsu:Id on the WS-Addressing To element is different from the
         * wsu:Id prefix on the WS-Security timestamp.
         */
        wsuPrefix = "wsu";
        envelope.addNamespaceDeclaration(wsuPrefix, WSConstants.WS_SECURITY_UTILITY_NAMESPACE);
    }

    SOAPFactory factory = SOAPFactory.newInstance();

    SOAPHeaderElement actionHeaderElement = header
            .addHeaderElement(new QName(WSConstants.WS_ADDR_NAMESPACE, "Action", wsAddrPrefix));
    actionHeaderElement.setMustUnderstand(true);
    actionHeaderElement.addTextNode(this.action);

    SOAPHeaderElement messageIdElement = header
            .addHeaderElement(new QName(WSConstants.WS_ADDR_NAMESPACE, "MessageID", wsAddrPrefix));
    String messageId = "urn:uuid:" + UUID.randomUUID().toString();
    context.put(MESSAGE_ID_CONTEXT_ATTRIBUTE, messageId);
    messageIdElement.addTextNode(messageId);

    SOAPHeaderElement replyToElement = header
            .addHeaderElement(new QName(WSConstants.WS_ADDR_NAMESPACE, "ReplyTo", wsAddrPrefix));
    SOAPElement addressElement = factory.createElement("Address", wsAddrPrefix, WSConstants.WS_ADDR_NAMESPACE);
    addressElement.addTextNode("http://www.w3.org/2005/08/addressing/anonymous");
    replyToElement.addChildElement(addressElement);

    SOAPHeaderElement toElement = header
            .addHeaderElement(new QName(WSConstants.WS_ADDR_NAMESPACE, "To", wsAddrPrefix));
    toElement.setMustUnderstand(true);

    toElement.addTextNode(this.to);

    String toIdentifier = "to-id-" + UUID.randomUUID().toString();
    toElement.addAttribute(new QName(WSConstants.WS_SECURITY_UTILITY_NAMESPACE, "Id", wsuPrefix), toIdentifier);
    try {
        toElement.setIdAttributeNS(WSConstants.WS_SECURITY_UTILITY_NAMESPACE, "Id", true);
    } catch (UnsupportedOperationException e) {
        // Axis2 has missing implementation of setIdAttributeNS
        LOG.error("error setting Id attribute: " + e.getMessage());
    }
    context.put(TO_ID_CONTEXT_ATTRIBUTE, toIdentifier);
}