Example usage for org.w3c.dom Element replaceChild

List of usage examples for org.w3c.dom Element replaceChild

Introduction

In this page you can find the example usage for org.w3c.dom Element replaceChild.

Prototype

public Node replaceChild(Node newChild, Node oldChild) throws DOMException;

Source Link

Document

Replaces the child node oldChild with newChild in the list of children, and returns the oldChild node.

Usage

From source file:Main.java

public static void main(String[] args) throws Exception {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);/*  w  w  w .j a va  2 s.  c  om*/
    DocumentBuilder db = dbf.newDocumentBuilder();

    // Create original document
    Document document = db.newDocument();
    Element root = document.createElementNS("urn:FOO", "ns0:Root");
    document.appendChild(root);
    Element request = document.createElementNS("urn:FOO", "ns0:Request");
    root.appendChild(request);

    // Create new Request element.
    Element newRequest = document.createElementNS("urn:BAR", "ns1:Request");

    // Replace Request element
    root.replaceChild(newRequest, request);

    // Output the new document
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer t = tf.newTransformer();
    DOMSource source = new DOMSource(document);
    StreamResult result = new StreamResult(System.out);
    t.transform(source, result);
}

From source file:Main.java

/**
 * Remove the Pi on top of e/*from   w ww .  j  a  v a 2 s  .c o  m*/
 *
 * @param e  the current element
 * @param pi the pi element
 */
public static void removeTopPi(Element e, Element pi) {
    Element piContainer = (Element) pi.getParentNode();
    piContainer.replaceChild(e, pi);
}

From source file:Main.java

License:asdf

public static void replacePerson(Document doc, String name, String phone, String email) {
    Element newPersonNode = doc.createElement("person");

    Element nameNode = doc.createElement("name");
    newPersonNode.appendChild(nameNode);
    Text nametextNode = doc.createTextNode(name);
    nameNode.appendChild(nametextNode);//w  w  w  . j  a v  a 2s. c o m

    Element phoneNode = doc.createElement("phone");
    newPersonNode.appendChild(phoneNode);
    Text phonetextNode = doc.createTextNode(phone);
    phoneNode.appendChild(phonetextNode);

    Element emailNode = doc.createElement("email");
    newPersonNode.appendChild(emailNode);
    Text emailtextNode = doc.createTextNode(email);
    emailNode.appendChild(emailtextNode);

    Element root = doc.getDocumentElement();
    Element oldPersonNode = (Element) root.getFirstChild();
    root.replaceChild(newPersonNode, oldPersonNode);
}

From source file:Main.java

public static void addCDATA(Document doc) {
    Element root = doc.getDocumentElement();
    Element place = (Element) root.getFirstChild();
    Element directions = (Element) place.getLastChild();
    String dirtext = "cdData.";
    CDATASection dirdata = doc.createCDATASection(dirtext);
    directions.replaceChild(dirdata, directions.getFirstChild());
}

From source file:DOMEdit.java

public static void addCDATA(Document doc) {
        Element root = doc.getDocumentElement();
        Element place = (Element) root.getFirstChild();
        Element directions = (Element) place.getLastChild();
        String dirtext = "cdData.";
        CDATASection dirdata = doc.createCDATASection(dirtext);
        directions.replaceChild(dirdata, directions.getFirstChild());
    }//from w ww.  ja v  a 2s.  com

From source file:Main.java

/**
 * Adds or replaces node in parent./*from   www . j  a  va  2s.c  om*/
 * @param parent
 * @param node
 * @throws Exception - Node cannot exist more than once,
 * i.e. multiple nodes with the same name cannot exist in parent.
 */
public static void replaceSingleNode(Element parent, final Node node) throws RuntimeException {

    NodeList nodes = parent.getElementsByTagName(node.getNodeName());

    if (nodes.getLength() > 1) {
        throw new RuntimeException(
                "Parent element contains multiple nodes with the name " + node.getNodeName());
    }
    if (nodes.getLength() == 0) {
        parent.appendChild(node);
    } else {
        parent.replaceChild(node, nodes.item(0));
    }
}

From source file:com.twinsoft.convertigo.engine.util.ProjectUtils.java

public static void getFullProjectDOM(Document document, String projectName, StreamSource xslFilter)
        throws TransformerFactoryConfigurationError, EngineException, TransformerException {
    Element root = document.getDocumentElement();
    getFullProjectDOM(document, projectName);

    // transformation du dom
    Transformer xslt = TransformerFactory.newInstance().newTransformer(xslFilter);
    Element xsl = document.createElement("xsl");
    xslt.transform(new DOMSource(document), new DOMResult(xsl));
    root.replaceChild(xsl.getFirstChild(), root.getFirstChild());
}

From source file:org.gvnix.service.roo.addon.addon.security.SecurityServiceImpl.java

/**
 * {@inheritDoc}//ww  w . j  av a2  s .  c om
 */
public void addOrUpdateAxisClientService(String serviceName, Map<String, String> parameters)
        throws SAXException, IOException {

    createAxisClientConfigFile();
    String axisClientPath = getAxisClientConfigPath();
    Document document = XmlUtils.getDocumentBuilder().parse(new File(axisClientPath));

    Element deployment = (Element) document.getFirstChild();

    Element serviceElementDescriptor = getAxisClientService(document, serviceName, parameters);

    List<Element> previousServices = XmlUtils
            .findElements("/deployment/service[@name='".concat(serviceName).concat("']"), deployment);

    if (previousServices.isEmpty()) {
        deployment.appendChild(serviceElementDescriptor);
    } else {
        deployment.replaceChild(serviceElementDescriptor, previousServices.get(0));
    }

    OutputStream outputStream = new ByteArrayOutputStream();

    Transformer transformer = XmlUtils.createIndentingTransformer();

    XmlUtils.writeXml(transformer, outputStream, document);

    fileManager.createOrUpdateTextFileIfRequired(axisClientPath, outputStream.toString(), false);

}

From source file:eu.eidas.encryption.SAMLAuthnResponseEncrypter.java

@Nonnull
private Response performEncryption(@Nonnull Response samlResponseEncryptee, @Nonnull Credential credential)
        throws EncryptionException {
    try {/*  w w  w .  j a v a  2  s .c  o  m*/
        // Set Data Encryption parameters
        EncryptionParameters encParams = new EncryptionParameters();
        encParams.setAlgorithm(getDataEncAlgorithm());
        // Set Key Encryption parameters
        KeyEncryptionParameters kekParams = new KeyEncryptionParameters();
        kekParams.setEncryptionCredential(credential);
        kekParams.setAlgorithm(getKeyEncAlgorithm());
        KeyInfoGeneratorFactory kigf = Configuration.getGlobalSecurityConfiguration()
                .getKeyInfoGeneratorManager().getDefaultManager().getFactory(credential);
        kekParams.setKeyInfoGenerator(kigf.newInstance());
        // Setup Open SAML Encrypter
        Encrypter encrypter = new Encrypter(encParams, kekParams);
        encrypter.setKeyPlacement(Encrypter.KeyPlacement.INLINE);
        if (getJcaProviderName() != null) {
            encrypter.setJCAProviderName(getJcaProviderName());
        }

        for (Assertion assertion : samlResponseEncryptee.getAssertions()) {
            if (assertion.getDOM() == null) {
                OpenSamlHelper.marshallToDom(assertion);
            }
            manageNamespaces(assertion);
        }
        List<EncryptedAssertion> encryptedAssertions = new ArrayList<>();
        for (Assertion assertion : samlResponseEncryptee.getAssertions()) {
            EncryptedAssertion encryptedAssertion = encrypter.encrypt(assertion);
            encryptedAssertions.add(encryptedAssertion);
        }

        Element previousDom = samlResponseEncryptee.getDOM();
        if (null == previousDom) {
            previousDom = OpenSamlHelper.marshallToDom(samlResponseEncryptee);
        }
        Document ownerDocument = previousDom.getOwnerDocument();

        // Deep copy the previous DOM into a new one using importNode()
        Document newDocument = DocumentBuilderFactoryUtil.newDocument();
        Node copiedRoot = newDocument.importNode(ownerDocument.getDocumentElement(), true);
        newDocument.appendChild(copiedRoot);

        Element newRootElement = newDocument.getDocumentElement();
        NodeList assertionList = newRootElement.getElementsByTagNameNS(
                Assertion.DEFAULT_ELEMENT_NAME.getNamespaceURI(),
                Assertion.DEFAULT_ELEMENT_NAME.getLocalPart());

        // Replace the encrypted assertions by the decrypted assertions in the new DOM tree:
        for (int i = 0, n = assertionList.getLength(); i < n; i++) {
            Node assertion = assertionList.item(i);
            EncryptedAssertion encryptedAssertion = encryptedAssertions.get(i);
            Element encryptedAssertionDOM = encryptedAssertion.getDOM();
            Node copiedEncryptedAssertion;
            if (null == encryptedAssertionDOM) {
                encryptedAssertionDOM = OpenSamlHelper.marshallToDom(encryptedAssertion);
            }
            // we may use adoptNode() instead of importNode() because the unmarshaller rectifies the ID-ness:
            copiedEncryptedAssertion = newDocument.adoptNode(encryptedAssertionDOM);
            newRootElement.replaceChild(copiedEncryptedAssertion, assertion);
        }

        // Finally unmarshall the updated DOM into a new XMLObject graph:
        // The unmarshaller rectifies the ID-ness:
        // See org.opensaml.saml1.core.impl.AssertionUnmarshaller.unmarshall()
        // See org.opensaml.saml2.core.impl.AssertionUnmarshaller.processAttribute()
        // And org.opensaml.saml1.core.impl.ResponseAbstractTypeUnmarshaller.unmarshall()
        // And org.opensaml.saml2.core.impl.StatusResponseTypeUnmarshaller.processAttribute()
        Response encryptedResponse = (Response) OpenSamlHelper.unmarshallFromDom(newDocument);

        if (LOGGER.isTraceEnabled()) {
            try {
                LOGGER.trace("SAML Response XMLObject encrypted: "
                        + EidasStringUtil.toString(DocumentBuilderFactoryUtil.marshall(newDocument, true)));
            } catch (TransformerException e) {
                LOGGER.error(e.getMessage(), e);
            }
        }

        return encryptedResponse;

    } catch (org.opensaml.xml.encryption.EncryptionException | ParserConfigurationException | MarshallException
            | UnmarshallException e) {
        throw new EncryptionException(e);
    }
}

From source file:fi.csc.kapaVirtaAS.MessageTransformer.java

public String transform(String message, MessageDirection direction) throws Exception {
    try {//from w w  w .j a  v  a 2s  . c  om
        DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = dBuilder
                .parse(new InputSource(new ByteArrayInputStream(stripXmlDefinition(message).getBytes())));
        doc.setXmlVersion("1.0");
        doc.normalizeDocument();
        Element root = doc.getDocumentElement();

        if (direction == MessageDirection.XRoadToVirta) {
            // Save XRoad schema prefix for response message
            xroadSchemaPrefix = namedNodeMapToStream(root.getAttributes())
                    .filter(node -> node
                            .getNodeValue().toLowerCase().contains(conf.getXroadSchema().toLowerCase()))
                    .findFirst()
                    .orElseThrow(
                            () -> new DOMException(DOMException.NOT_FOUND_ERR, "Xroad schema prefix not found"))
                    .getNodeName();

            xroadIdSchemaPrefix = namedNodeMapToStream(root.getAttributes())
                    .filter(node -> node.getNodeValue().toLowerCase()
                            .contains(conf.getXroadIdSchema().toLowerCase()))
                    .findFirst().orElseThrow(() -> new DOMException(DOMException.NOT_FOUND_ERR,
                            "XroadId schema prefix not found"))
                    .getNodeName();

            // Change tns schema
            getNodeByKeyword(namedNodeMapToStream(root.getAttributes()), conf.getAdapterServiceSchema())
                    .map(attribute -> setNodeValueToNode(attribute, conf.getVirtaServiceSchema()));

            //There should be two children under the root node: header and body
            for (int i = 0; i < root.getChildNodes().getLength(); ++i) {
                Node child = root.getChildNodes().item(i);
                // Save soap-headers for reply message and remove child elements under soap-headers
                if (child.getNodeName().toLowerCase().contains("header")) {
                    this.xroadHeaderElement = child.cloneNode(true);
                    root.replaceChild(child.cloneNode(false), child);
                }
                // Change SOAP-body
                else if (child.getNodeName().toLowerCase().contains("body")) {
                    for (int j = 0; j < child.getChildNodes().getLength(); ++j) {
                        if (child.getChildNodes().item(j).getNodeType() == Node.ELEMENT_NODE) {
                            doc.renameNode(child.getChildNodes().item(j), conf.getVirtaServiceSchema(),
                                    child.getChildNodes().item(j).getNodeName() + "Request");
                            break;
                        }
                    }

                }
            }
        }
        if (direction == MessageDirection.VirtaToXRoad) {
            // Add XRoad schemas with saved prefix to response message
            root.setAttribute(xroadSchemaPrefix, conf.getXroadSchema());
            root.setAttribute(xroadIdSchemaPrefix, conf.getXroadIdSchema());

            // Change tns schema
            getNodeByKeyword(namedNodeMapToStream(root.getAttributes()), conf.getVirtaServiceSchema())
                    .map(attribute -> setNodeValueToNode(attribute, conf.getAdapterServiceSchema()));

            // Change SOAP-headers
            Node headerNode = getNodeByKeyword(nodeListToStream(root.getChildNodes()), "header").get();
            for (int i = 0; i < this.xroadHeaderElement.getChildNodes().getLength(); ++i) {
                headerNode.appendChild(doc.importNode(this.xroadHeaderElement.getChildNodes().item(i), true));
            }

            // Change SOAP-body
            getNodeByKeyword(nodeListToStream(root.getChildNodes()), "body")
                    .map(bodyNode -> removeAttribureFromElement(nodeToElement(bodyNode), virtaServicePrefix))
                    .map(bodyNode -> setAttributeToElement(nodeToElement(bodyNode), virtaServicePrefix,
                            conf.getAdapterServiceSchema()));

            //Virta gives malformed soap fault message. Need to parse it correct.
            getNodeByKeyword(nodeListToStream(root.getChildNodes()), "body")
                    .map(bodyNode -> nodeListToStream(bodyNode.getChildNodes())).map(
                            nodesInBodyStream -> getNodeByKeyword(nodesInBodyStream, "fault")
                                    .map(faultNode -> removeAttribureFromElement(
                                            nodeToElement(nodeToElement(faultNode)
                                                    .getElementsByTagName("faultstring").item(0)),
                                            "xml:lang")));
        }

        doc.normalizeDocument();
        DOMSource domSource = new DOMSource(doc);
        StringWriter writer = new StringWriter();
        StreamResult result = new StreamResult(writer);
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.transform(domSource, result);
        message = writer.toString();

        return stripXmlDefinition(message);
    } catch (Exception e) {
        if (direction == MessageDirection.XRoadToVirta) {
            log.error("Error in parsing request message.");
            throw e;
        } else {
            log.error("Error in parsing response message");
            log.error(e.toString());
            return stripXmlDefinition(faultMessageService.generateSOAPFault(message,
                    faultMessageService.getResValidFail(), this.xroadHeaderElement));
        }
    }
}