如何向SOAPHeader插入SAML声明
问题描述:
NB-6.8 jdk-1.6.14 WSS4j-1.5.8,OpenSAML-2.3.0 我尝试修改WSS4J-1.5.8以运行SAML 2.0,但无法插入所产生的断言到现有SOAP头部,这样的代码:如何向SOAPHeader插入SAML声明
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)。他们工作,为什么我的代码错了?我想念的是什么。
答
实际上,我遇到了使用importNode(NAMESPACE_ERR)的问题,它可以使用adoptNode来解决。
答
问题是断言的拥有者文档与节点的拥有者文档不同。要解决此问题,节点的所有者文档必须先取得断言的所有权,然后才能追加它。 正如ralph指出的那样,您可以使用node.getOwnerDocument().adoptNode(assertion)
来解决该问题。
在您要查找的所有者文档上认为它的importNode()。 – 2010-03-16 22:21:47
它没有用。我没有看到任何元素被添加到文档,虽然它应该像javadoc说。 – mono 2010-03-17 02:35:07
我最近遇到了类似的问题。在我的情况下,这是因为缺少一些命名空间。 – JST 2010-04-22 16:34:37