首页 > 解决方案 > “WRONG_DOCUMENT_ERR:一个节点在与创建它的文档不同的文档中使用”尽管我在另一个节点中导入,但抛出异常

问题描述

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

  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)

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

标签: javaxmlsoap

解决方案


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

解决方案如下:

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);

推荐阅读