2010-03-16 3 views
1

NB-6.8 jdk-1.6.14 WSS4j-1.5.8, OpenSAML-2.3.0 Я пытаюсь изменить WSS4J-1.5.8 для работы с SAML 2.0, и я не мог вставить генерируемое утверждение к существующему заголовку SOAP, код следующим образом:Как вставить утверждение SAML в SOAPHeader

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

+1

подумайте о своем importNode() в документе владельца, который вы ищете. –

+0

это не работает. Я не вижу, что какой-либо элемент добавлен в doc, хотя он должен быть похож на javadoc. – mono

+0

Недавно я столкнулся с подобной проблемой. В моем случае это было из-за недостающих пространств имен. – JST

ответ

0

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

2

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

 Смежные вопросы

  • Нет связанных вопросов^_^