Example usage for org.w3c.dom Node getNextSibling

List of usage examples for org.w3c.dom Node getNextSibling

Introduction

In this page you can find the example usage for org.w3c.dom Node getNextSibling.

Prototype

public Node getNextSibling();

Source Link

Document

The node immediately following this node.

Usage

From source file:org.apache.ws.security.processor.ReferenceListProcessor.java

/**
 * Decrypt the EncryptedData argument using a SecretKey.
 * @param doc The (document) owner of EncryptedData
 * @param dataRefURI The URI of EncryptedData
 * @param encData The EncryptedData element
 * @param symmetricKey The SecretKey with which to decrypt EncryptedData
 * @param symEncAlgo The symmetric encryption algorithm to use
 * @throws WSSecurityException/*from   www.ja v a 2 s. c  o m*/
 */
public static WSDataRef decryptEncryptedData(Document doc, String dataRefURI, Element encData,
        SecretKey symmetricKey, String symEncAlgo) throws WSSecurityException {
    XMLCipher xmlCipher = null;
    try {
        xmlCipher = XMLCipher.getInstance(symEncAlgo);
        xmlCipher.init(XMLCipher.DECRYPT_MODE, symmetricKey);
    } catch (XMLEncryptionException ex) {
        throw new WSSecurityException(WSSecurityException.UNSUPPORTED_ALGORITHM, null, null, ex);
    }

    WSDataRef dataRef = new WSDataRef(dataRefURI);
    dataRef.setWsuId(dataRefURI);
    dataRef.setAlgorithm(symEncAlgo);
    boolean content = X509Util.isContent(encData);
    dataRef.setContent(content);

    Node parent = encData.getParentNode();
    Node previousSibling = encData.getPreviousSibling();
    if (content) {
        encData = (Element) encData.getParentNode();
        parent = encData.getParentNode();
    }

    try {
        xmlCipher.doFinal(doc, encData, content);
    } catch (Exception ex) {
        throw new WSSecurityException(WSSecurityException.FAILED_CHECK, null, null, ex);
    }

    if (parent.getLocalName().equals(WSConstants.ENCRYPTED_HEADER)
            && parent.getNamespaceURI().equals(WSConstants.WSSE11_NS)) {

        Node decryptedHeader = parent.getFirstChild();
        Element decryptedHeaderClone = (Element) decryptedHeader.cloneNode(true);
        parent.getParentNode().appendChild(decryptedHeaderClone);
        parent.getParentNode().removeChild(parent);
        dataRef.setProtectedElement(decryptedHeaderClone);
        dataRef.setXpath(getXPath(decryptedHeaderClone));
    } else if (content) {
        dataRef.setProtectedElement(encData);
        dataRef.setXpath(getXPath(encData));
    } else {
        Node decryptedNode;
        if (previousSibling == null) {
            decryptedNode = parent.getFirstChild();
        } else {
            decryptedNode = previousSibling.getNextSibling();
        }
        if (decryptedNode != null && Node.ELEMENT_NODE == decryptedNode.getNodeType()) {
            dataRef.setProtectedElement((Element) decryptedNode);
        }
        dataRef.setXpath(getXPath(decryptedNode));
    }

    return dataRef;
}

From source file:org.apache.ws.security.util.WSSecurityUtil.java

/**
 * Returns the first element that matches <code>name</code> and
 * <code>namespace</code>. <p/> This is a replacement for a XPath lookup
 * <code>//name</code> with the given namespace. It's somewhat faster than
 * XPath, and we do not deal with prefixes, just with the real namespace URI
 * /*from   w w  w. j ava2  s.c om*/
 * @param startNode Where to start the search
 * @param name Local name of the element
 * @param namespace Namespace URI of the element
 * @return The found element or <code>null</code>
 */
public static Node findElement(Node startNode, String name, String namespace) {
    //
    // Replace the formerly recursive implementation with a depth-first-loop
    // lookup
    //
    if (startNode == null) {
        return null;
    }
    Node startParent = startNode.getParentNode();
    Node processedNode = null;

    while (startNode != null) {
        // start node processing at this point
        if (startNode.getNodeType() == Node.ELEMENT_NODE && startNode.getLocalName().equals(name)) {
            String ns = startNode.getNamespaceURI();
            if (ns != null && ns.equals(namespace)) {
                return startNode;
            }

            if ((namespace == null || namespace.length() == 0) && (ns == null || ns.length() == 0)) {
                return startNode;
            }
        }
        processedNode = startNode;
        startNode = startNode.getFirstChild();

        // no child, this node is done.
        if (startNode == null) {
            // close node processing, get sibling
            startNode = processedNode.getNextSibling();
        }
        // no more siblings, get parent, all children
        // of parent are processed.
        while (startNode == null) {
            processedNode = processedNode.getParentNode();
            if (processedNode == startParent) {
                return null;
            }
            // close parent node processing (processed node now)
            startNode = processedNode.getNextSibling();
        }
    }
    return null;
}

From source file:org.apache.ws.security.util.WSSecurityUtil.java

/**
 * Returns the single SAMLAssertion element that contains an AssertionID/ID that
 * matches the supplied parameter./*w  ww . j  a  v  a 2s. c  o  m*/
 * 
 * @param startNode Where to start the search
 * @param value Value of the AssertionID/ID attribute
 * @return The found element if there was exactly one match, or
 *         <code>null</code> otherwise
 */
public static Element findSAMLAssertionElementById(Node startNode, String value) {
    Element foundElement = null;

    //
    // Replace the formerly recursive implementation with a depth-first-loop
    // lookup
    //
    if (startNode == null) {
        return null;
    }
    Node startParent = startNode.getParentNode();
    Node processedNode = null;

    while (startNode != null) {
        // start node processing at this point
        if (startNode.getNodeType() == Node.ELEMENT_NODE) {
            Element se = (Element) startNode;
            if ((se.hasAttribute("ID") && value.equals(se.getAttribute("ID")))
                    || (se.hasAttribute("AssertionID") && value.equals(se.getAttribute("AssertionID")))) {
                if (foundElement == null) {
                    foundElement = se; // Continue searching to find duplicates
                } else {
                    log.warn("Multiple elements with the same 'ID' attribute value!");
                    return null;
                }
            }
        }

        processedNode = startNode;
        startNode = startNode.getFirstChild();

        // no child, this node is done.
        if (startNode == null) {
            // close node processing, get sibling
            startNode = processedNode.getNextSibling();
        }
        // no more siblings, get parent, all children
        // of parent are processed.
        while (startNode == null) {
            processedNode = processedNode.getParentNode();
            if (processedNode == startParent) {
                return foundElement;
            }
            // close parent node processing (processed node now)
            startNode = processedNode.getNextSibling();
        }
    }
    return foundElement;
}

From source file:org.apache.ws.security.util.WSSecurityUtil.java

/**
 * Returns the single element that contains an Id with value
 * <code>uri</code> and <code>namespace</code>. <p/> This is a
 * replacement for a XPath Id lookup with the given namespace. It's somewhat
 * faster than XPath, and we do not deal with prefixes, just with the real
 * namespace URI/*w  ww . j  a v a 2s . c  om*/
 * 
 * If there are multiple elements, we log a warning and return null as this
 * can be used to get around the signature checking.
 * 
 * @param startNode Where to start the search
 * @param value Value of the Id attribute
 * @param namespace Namespace URI of the Id
 * @return The found element if there was exactly one match, or
 *         <code>null</code> otherwise
 */
public static Element findElementById(Node startNode, String value, String namespace) {
    Element foundElement = null;

    //
    // Replace the formerly recursive implementation with a depth-first-loop
    // lookup
    //
    if (startNode == null) {
        return null;
    }
    Node startParent = startNode.getParentNode();
    Node processedNode = null;

    while (startNode != null) {
        // start node processing at this point
        if (startNode.getNodeType() == Node.ELEMENT_NODE) {
            Element se = (Element) startNode;
            if (se.hasAttributeNS(namespace, "Id") && value.equals(se.getAttributeNS(namespace, "Id"))) {
                if (foundElement == null) {
                    foundElement = se; // Continue searching to find duplicates
                } else {
                    log.warn("Multiple elements with the same 'Id' attribute value!");
                    return null;
                }
            }
        }

        processedNode = startNode;
        startNode = startNode.getFirstChild();

        // no child, this node is done.
        if (startNode == null) {
            // close node processing, get sibling
            startNode = processedNode.getNextSibling();
        }
        // no more siblings, get parent, all children
        // of parent are processed.
        while (startNode == null) {
            processedNode = processedNode.getParentNode();
            if (processedNode == startParent) {
                return foundElement;
            }
            // close parent node processing (processed node now)
            startNode = processedNode.getNextSibling();
        }
    }
    return foundElement;
}

From source file:org.apache.xml.security.Init.java

/**
 * Initialise the library from a configuration file
 *//*ww  w  .ja va  2s  .  c o  m*/
private static void fileInit(InputStream is) {
    try {
        /* read library configuration file */
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

        dbf.setNamespaceAware(true);
        dbf.setValidating(false);

        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(is);
        Node config = doc.getFirstChild();
        for (; config != null; config = config.getNextSibling()) {
            if ("Configuration".equals(config.getLocalName())) {
                break;
            }
        }
        if (config == null) {
            log.error("Error in reading configuration file - Configuration element not found");
            return;
        }
        for (Node el = config.getFirstChild(); el != null; el = el.getNextSibling()) {
            if (el == null || Node.ELEMENT_NODE != el.getNodeType()) {
                continue;
            }
            String tag = el.getLocalName();
            if (tag.equals("ResourceBundles")) {
                Element resource = (Element) el;
                /* configure internationalization */
                Attr langAttr = resource.getAttributeNode("defaultLanguageCode");
                Attr countryAttr = resource.getAttributeNode("defaultCountryCode");
                String languageCode = (langAttr == null) ? null : langAttr.getNodeValue();
                String countryCode = (countryAttr == null) ? null : countryAttr.getNodeValue();
                I18n.init(languageCode, countryCode);
            }

            if (tag.equals("CanonicalizationMethods")) {
                Element[] list = XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "CanonicalizationMethod");

                for (int i = 0; i < list.length; i++) {
                    String URI = list[i].getAttributeNS(null, "URI");
                    String JAVACLASS = list[i].getAttributeNS(null, "JAVACLASS");
                    try {
                        Canonicalizer.register(URI, JAVACLASS);
                        if (log.isDebugEnabled()) {
                            log.debug("Canonicalizer.register(" + URI + ", " + JAVACLASS + ")");
                        }
                    } catch (ClassNotFoundException e) {
                        Object exArgs[] = { URI, JAVACLASS };
                        log.error(I18n.translate("algorithm.classDoesNotExist", exArgs));
                    }
                }
            }

            if (tag.equals("TransformAlgorithms")) {
                Element[] tranElem = XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "TransformAlgorithm");

                for (int i = 0; i < tranElem.length; i++) {
                    String URI = tranElem[i].getAttributeNS(null, "URI");
                    String JAVACLASS = tranElem[i].getAttributeNS(null, "JAVACLASS");
                    try {
                        Transform.register(URI, JAVACLASS);
                        if (log.isDebugEnabled()) {
                            log.debug("Transform.register(" + URI + ", " + JAVACLASS + ")");
                        }
                    } catch (ClassNotFoundException e) {
                        Object exArgs[] = { URI, JAVACLASS };

                        log.error(I18n.translate("algorithm.classDoesNotExist", exArgs));
                    } catch (NoClassDefFoundError ex) {
                        log.warn("Not able to found dependencies for algorithm, I'll keep working.");
                    }
                }
            }

            if ("JCEAlgorithmMappings".equals(tag)) {
                Node algorithmsNode = ((Element) el).getElementsByTagName("Algorithms").item(0);
                if (algorithmsNode != null) {
                    Element[] algorithms = XMLUtils.selectNodes(algorithmsNode.getFirstChild(), CONF_NS,
                            "Algorithm");
                    for (int i = 0; i < algorithms.length; i++) {
                        Element element = algorithms[i];
                        String id = element.getAttribute("URI");
                        JCEMapper.register(id, new JCEMapper.Algorithm(element));
                    }
                }
            }

            if (tag.equals("SignatureAlgorithms")) {
                Element[] sigElems = XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "SignatureAlgorithm");

                for (int i = 0; i < sigElems.length; i++) {
                    String URI = sigElems[i].getAttributeNS(null, "URI");
                    String JAVACLASS = sigElems[i].getAttributeNS(null, "JAVACLASS");

                    /** $todo$ handle registering */

                    try {
                        SignatureAlgorithm.register(URI, JAVACLASS);
                        if (log.isDebugEnabled()) {
                            log.debug("SignatureAlgorithm.register(" + URI + ", " + JAVACLASS + ")");
                        }
                    } catch (ClassNotFoundException e) {
                        Object exArgs[] = { URI, JAVACLASS };

                        log.error(I18n.translate("algorithm.classDoesNotExist", exArgs));
                    }
                }
            }

            if (tag.equals("ResourceResolvers")) {
                Element[] resolverElem = XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "Resolver");

                for (int i = 0; i < resolverElem.length; i++) {
                    String JAVACLASS = resolverElem[i].getAttributeNS(null, "JAVACLASS");
                    String Description = resolverElem[i].getAttributeNS(null, "DESCRIPTION");

                    if ((Description != null) && (Description.length() > 0)) {
                        if (log.isDebugEnabled()) {
                            log.debug("Register Resolver: " + JAVACLASS + ": " + Description);
                        }
                    } else {
                        if (log.isDebugEnabled()) {
                            log.debug("Register Resolver: " + JAVACLASS + ": For unknown purposes");
                        }
                    }
                    try {
                        ResourceResolver.register(JAVACLASS);
                    } catch (Throwable e) {
                        log.warn("Cannot register:" + JAVACLASS + " perhaps some needed jars are not installed",
                                e);
                    }
                }
            }

            if (tag.equals("KeyResolver")) {
                Element[] resolverElem = XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "Resolver");
                List<String> classNames = new ArrayList<String>(resolverElem.length);
                for (int i = 0; i < resolverElem.length; i++) {
                    String JAVACLASS = resolverElem[i].getAttributeNS(null, "JAVACLASS");
                    String Description = resolverElem[i].getAttributeNS(null, "DESCRIPTION");

                    if ((Description != null) && (Description.length() > 0)) {
                        if (log.isDebugEnabled()) {
                            log.debug("Register Resolver: " + JAVACLASS + ": " + Description);
                        }
                    } else {
                        if (log.isDebugEnabled()) {
                            log.debug("Register Resolver: " + JAVACLASS + ": For unknown purposes");
                        }
                    }
                    classNames.add(JAVACLASS);
                }
                KeyResolver.registerClassNames(classNames);
            }

            if (tag.equals("PrefixMappings")) {
                if (log.isDebugEnabled()) {
                    log.debug("Now I try to bind prefixes:");
                }

                Element[] nl = XMLUtils.selectNodes(el.getFirstChild(), CONF_NS, "PrefixMapping");

                for (int i = 0; i < nl.length; i++) {
                    String namespace = nl[i].getAttributeNS(null, "namespace");
                    String prefix = nl[i].getAttributeNS(null, "prefix");
                    if (log.isDebugEnabled()) {
                        log.debug("Now I try to bind " + prefix + " to " + namespace);
                    }
                    ElementProxy.setDefaultPrefix(namespace, prefix);
                }
            }
        }
    } catch (Exception e) {
        log.error("Bad: ", e);
        e.printStackTrace();
    }
}

From source file:org.apache.xml.security.keys.content.X509Data.java

/**
 * Constructor X509Data/* w w w  .j a v a  2 s . co  m*/
 *
 * @param element
 * @param BaseURI
 * @throws XMLSecurityException
 */
public X509Data(Element element, String BaseURI) throws XMLSecurityException {
    super(element, BaseURI);

    Node sibling = this.constructionElement.getFirstChild();
    while (sibling != null) {
        if (sibling.getNodeType() != Node.ELEMENT_NODE) {
            sibling = sibling.getNextSibling();
            continue;
        }
        return;
    }
    /* No Elements found */
    Object exArgs[] = { "Elements", Constants._TAG_X509DATA };
    throw new XMLSecurityException("xml.WrongContent", exArgs);
}

From source file:org.apache.xml.security.keys.content.X509Data.java

/**
 * Method lengthUnknownElement//from  w w w .j  a  va2s . c o m
 *
 * @return the number of UnknownElement elements in this X509Data
 */
public int lengthUnknownElement() {
    int result = 0;
    Node n = this.constructionElement.getFirstChild();
    while (n != null) {
        if ((n.getNodeType() == Node.ELEMENT_NODE) && !n.getNamespaceURI().equals(Constants.SignatureSpecNS)) {
            result++;
        }
        n = n.getNextSibling();
    }

    return result;
}

From source file:org.apache.xml.security.keys.KeyInfo.java

/**
 * Searches the library wide KeyResolvers for public keys
 *
 * @return The public key contained in this Node.
 * @throws KeyResolverException//from w w  w. ja  v a2  s .c  o  m
 */
PublicKey getPublicKeyFromStaticResolvers() throws KeyResolverException {
    Iterator<KeyResolverSpi> it = KeyResolver.iterator();
    while (it.hasNext()) {
        KeyResolverSpi keyResolver = it.next();
        Node currentChild = this.constructionElement.getFirstChild();
        String uri = this.getBaseURI();
        while (currentChild != null) {
            if (currentChild.getNodeType() == Node.ELEMENT_NODE) {
                for (StorageResolver storage : storageResolvers) {
                    PublicKey pk = keyResolver.engineLookupAndResolvePublicKey((Element) currentChild, uri,
                            storage);

                    if (pk != null) {
                        return pk;
                    }
                }
            }
            currentChild = currentChild.getNextSibling();
        }
    }
    return null;
}

From source file:org.apache.xml.security.keys.KeyInfo.java

/**
 * Searches the per-KeyInfo KeyResolvers for public keys
 *
 * @return The public key contained in this Node.
 * @throws KeyResolverException//from w  w w.  j a v  a 2 s  . c  o  m
 */
PublicKey getPublicKeyFromInternalResolvers() throws KeyResolverException {
    for (KeyResolverSpi keyResolver : internalKeyResolvers) {
        if (log.isDebugEnabled()) {
            log.debug("Try " + keyResolver.getClass().getName());
        }

        Node currentChild = this.constructionElement.getFirstChild();
        String uri = this.getBaseURI();
        while (currentChild != null) {
            if (currentChild.getNodeType() == Node.ELEMENT_NODE) {
                for (StorageResolver storage : storageResolvers) {
                    PublicKey pk = keyResolver.engineLookupAndResolvePublicKey((Element) currentChild, uri,
                            storage);

                    if (pk != null) {
                        return pk;
                    }
                }
            }
            currentChild = currentChild.getNextSibling();
        }
    }

    return null;
}

From source file:org.apache.xml.security.keys.KeyInfo.java

private X509Certificate applyCurrentResolver(String uri, KeyResolverSpi keyResolver)
        throws KeyResolverException {
    Node currentChild = this.constructionElement.getFirstChild();
    while (currentChild != null) {
        if (currentChild.getNodeType() == Node.ELEMENT_NODE) {
            for (StorageResolver storage : storageResolvers) {
                X509Certificate cert = keyResolver.engineLookupResolveX509Certificate((Element) currentChild,
                        uri, storage);/*from w  w  w.  j ava2  s . c o m*/

                if (cert != null) {
                    return cert;
                }
            }
        }
        currentChild = currentChild.getNextSibling();
    }
    return null;
}