1

NB-6.8 jdk-1.6.14 WSS4j-1.5.8 ,OpenSAML-2.3.0 我尝试修改 WSS4J-1.5.8 来操作 SAML 2.0,我无法将生成的断言插入到现有的 SOAP Header,代码如下:

Assertion assertion = createAssertion("some subject", "some issuer");

    Document doc = docBuilder.parse("request.xml");

    Element parent = doc.getDocumentElement();

    Node node = parent.getElementsByTagName("soapenv:Header");
    node.appendChild(assertion.getDOM());

错误:WRONG_DOCUMENT_ERR:节点在与创建它的文档不同的文档中使用。

但是在 wss4j 中,像 insertSecurityHeader 之类的一些函数也是这样做的(appendChild 或 inserBefore)。他们确实有效,为什么我的代码有问题?我想念什么。

4

2 回答 2

2

问题是assertion的所有者文档与node的所有者文档不同。为了解决这个问题,节点的所有者文档必须先取得断言的所有权,然后才能附加它。正如拉尔夫指出的那样,您可以使用它node.getOwnerDocument().adoptNode(assertion)来解决该问题。

于 2012-04-18T11:46:09.857 回答
0

实际上,我在使用 importNode (NAMESPACE_ERR) 时遇到了问题,可以改用采用adoptNode 来解决。

于 2010-07-08T10:53:14.127 回答