【问题标题】:"WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it" exception thrown although I am importing in another node“WRONG_DOCUMENT_ERR:一个节点在与创建它的文档不同的文档中使用”尽管我在另一个节点中导入,但抛出异常
【发布时间】:2021-08-05 08:42:32
【问题描述】:

我正在尝试将节点附加到 xml 文件中的正文元素,如下所示:

  Document document2 = db.newDocument();
  Node node = document2.importNode(document.getFirstChild(), true);
  envelope.getBody().addBodyElement(QName.valueOf("com:createLicense")).appendChild(node);

我得到了这个例外:

org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
at java.xml/com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(ParentNode.java:355)
at java.xml/com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(ParentNode.java:286)
at java.xml/com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:230)
at com.sun.xml.messaging.saaj.soap.impl.ElementImpl.appendChild(ElementImpl.java:234)
at SOAPClientSAAJ.createSoapEnvelope(SOAPClientSAAJ.java:106)
at SOAPClientSAAJ.createSOAPRequest(SOAPClientSAAJ.java:157)
at SOAPClientSAAJ.callSoapWebService(SOAPClientSAAJ.java:139)
at SOAPClientSAAJ.main(SOAPClientSAAJ.java:47)

有什么建议/解决方案吗?

【问题讨论】:

  • document2envelope.getBody() 后面的文件还是另一个文件?您可能在代码中使用三个文档,而不是两个。
  • 是的,你是对的。我正在处理三个文档。

标签: java xml soap


【解决方案1】:

问题是我正在处理三个文档。

解决方案如下:

Document document = db.newDocument();
jaxbMarshaller.marshal(jaxbElement, document);
DocumentFragment docFrag = document.createDocumentFragment();
Element rootElement = document.getDocumentElement();
docFrag.appendChild(rootElement);
Document ownerDoc = soapBody.getOwnerDocument();
Node replacingNode = ownerDoc.importNode(docFrag, true);

envelope.getBody().addBodyElement(QName.valueOf("com:createLicense")).appendChild(node);

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多