С некоторой версии Java (примерно с 7u25 см.
http://stackoverflow.com/questions/17331187/xml-dig-sig-error-after-upgrade-to-java7u25) начались проблемы со встаиванием атрибута Id в тег Body SOAP-запроса. Такое встраивание необходимо с целью подписания запроса ЭЦП.
Пока я встретил две ошибки в зависимости каким путем идет встраивание атрибута Id:
- com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverFragment
- org.apache.xml.security.utils.resolver.ResourceResolverException: Cannot resolve element with ID ...
Чтобы решить проблему нужно специальным образом пометить атрибут Id как ID (простите за тавтологию)
Первая ошибка возникает в коде такого вида:
Attr attr = doc.createAttribute("id");
attr.setValue("body");
body.getAttributes().setNamedItem(attr);
Подкорректированная версия:
Attr attr = doc.createAttribute("id");
attr.setValue("body");
body.getAttributes().setNamedItem(attr);
((Element) body).setIdAttributeNode(attr, true);//fix
Вторая ошибка возникает в коде вида:
SOAPBody body = env.getBody();
body.addAttribute(new QName("Id"), id);
Подкорректированная версия:
SOAPBody body = env.getBody();
body.addAttribute(new QName("Id"), id);
body.setIdAttribute("Id", true);//fix
Если помог отпишитесь 🙂
Добавить комментарий