Возможно, вы сможете выполнить некоторые манипуляции с DOM для восстановления XML. Например, вот некоторый код, который мне пришлось написать, чтобы исправить некоторые атрибуты пространства имен в SAML Response XML от клиента (на самом деле, это было то, что пространства имен были определены в элементе Response, но утверждение нужно было извлечь и нужно было сохранить пространства имен). *
Element assertionElem = assertion.getDOM();
if (!assertionElem.hasAttribute("xmlns:saml")) {
assertionElem.setAttribute("xmlns:saml", "urn:oasis:names:tc:SAML:2.0:assertion");
}
if (!assertionElem.hasAttribute("xmlns:ds")) {
assertionElem.setAttribute("xmlns:ds", "http://www.w3.org/2000/09/xmldsig#");
}
String assertionXml = Serializer.serializeXml(assertionElem, true, true);
Возможно, вы можете просто добавить атрибут xmlns = "http://www.w3.org/2000/09/xmldsig#" в Signature, а затем setDOM()
для обновления. Вопрос в том, получит ли samlResponse.getSignature().getDOM()
вам XML или вам нужно будет получить DOM для всего ответа и извлеките из него элемент Signature.
Конечно, на самом деле клиент не должен отправлять вам неправильно XML с пространством имен, но мы знаем, как это происходит.