获取org.w3c.dom.DOMException:HIERARCHY_REQUEST_ERR将根节点添加到文档

问题描述 投票:1回答:1

我正在尝试创建一个简单的XML文档,并在将根元素添加到文档时收到上述错误。我只有一个根元素(为文档创建的第一个元素),并且在第一个append_child()调用时抛出错误。以下是导致错误抛出的代码(在securityDoc.appendChild(securityDoc)调用上):

 public Document CreateSecurityHeader() throws ParserConfigurationException {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document securityDoc = builder.newDocument();

    try {
        Element securityRoot = securityDoc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse:Security");            
        securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
        securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
        securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:env", "http://www.w3.org/2003/05/soap-envelope");
        securityRoot.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:wss","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
        securityRoot.setAttribute("env:mustUnderstand", "1");            
        securityDoc.appendChild(securityDoc);

由于这是此文档中唯一的元素,我如何得到此错误?我确实需要将xalan和xerces库作为该项目的依赖项用于其他内容,这里是否存在不兼容性?

java xml xerces xalan
1个回答
0
投票

哎呦。你将securityDoc追加到securityDoc

securityDoc.appendChild(securityDoc);

我相信你的意思是:

securityDoc.appendChild(securityRoot);

我只是通过逐步通过验证代码注意到这一点,当它使用节点查找表来检查提议的树结构是否合法时,我看到你附加的是DOCUMENT_NODE,这是附加到DOCUMENT_NODE不合法的。

© www.soinside.com 2019 - 2024. All rights reserved.