如何将SAML断言插入SOAPHeader

时间:2010-03-16 18:03:41

标签: xml dom saml wss4j assertion

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)。他们确实有效,为什么我的代码错了?我错过了什么。

2 个答案:

答案 0 :(得分:2)

问题是断言的所有者文档与 node 的所有者文档不同。要解决此问题,节点的所有者文档必须先获取断言的所有权,然后才能追加它。 正如ralph所指出,您可以使用node.getOwnerDocument().adoptNode(assertion)来解决该问题。

答案 1 :(得分:0)

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