как вставить утверждение SAML в SOAPHeader - PullRequest
1 голос
/ 16 марта 2010

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 или insertBefore) тоже. Они работают, почему это не так в моем коде? что я скучаю.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2012

Проблема в том, что документ владельца утверждения отличается от документа владельца узла . Чтобы решить эту проблему, документ владельца узла должен стать владельцем утверждения , прежде чем вы сможете добавить его. Как указал Ральф, вы можете использовать node.getOwnerDocument().adoptNode(assertion) для решения этой проблемы.

0 голосов
/ 08 июля 2010

На самом деле, я столкнулся с проблемами при использовании importNode (NAMESPACE_ERR), которые можно было решить, используя вместо этого acceptNode.

...