Получение org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR добавление корневого узла в документ - PullRequest
1 голос
/ 11 марта 2019

Я пытаюсь создать простой 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 как зависимости для этого проекта для чего-то еще, может быть здесь несовместимость?

1 Ответ

0 голосов
/ 11 марта 2019

Упс. Вы добавляете securityDoc к securityDoc.

securityDoc.appendChild(securityDoc);

Я уверен, что вы имеете в виду это:

securityDoc.appendChild(securityRoot);

Я только заметил это, пройдя код проверки, и когда он использовал таблицы поиска узлов, чтобы проверить, является ли предложенная древовидная структура допустимой, я увидел, что вы добавляете DOCUMENT_NODE, что не разрешено добавлять к DOCUMENT_NODE.

...