1

NB-6.8 jdk-1.6.14 WSS4j-1.5.8 ,OpenSAML-2.3.0 WSS4J-1.5.8 を変更して SAML 2.0 を動作させようとしましたが、生成されたアサーションを既存の SOAP ヘッダーに挿入できませんでした。次のようなコードです。 :

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) を使用して問題に遭遇しましたが、代わりに adaptNode を使用して解決できました。

于 2010-07-08T10:53:14.127 に答える