java - “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)
有什么建议/解决方案吗?
解决方案
问题是我正在处理三个文件。
解决方案如下:
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);
推荐阅读
- java - 当我启动应用程序时,使用 @around 的 Spring AOP 会抛出 org.springframework.beans.factory.BeanCreationException
- php - PHP反序列化变量
- angular - 材料日期选择器的 Unix 纪元双向数据绑定
- excel - 基于大于 0 的各种标准运行的 if 语句
- header - 以表单组输入值为条件的 Twig
- r - ' ' 的登录失败。将 DSN 与 Rstudio 连接到 MS SQL 2016 时
- google-cloud-dataflow - 不适用于使用 Apache Beam 的 ParDo 和 DoFn
- python - 具有自定义聚合函数的 pandas groupby() 并将结果放入新列
- jdbc - neo4j jdbc 驱动程序作为 Wildfly 上的一个模块
- jsp - Jahia 从编辑模式获取实时工作区 JCR 数据