barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

суббота, 5 сентября 2015 г.

WSS4J: ошибка "SOAP Envelope can not have children other than SOAP Header and Body" при попытке добавить security-заголовок

Проблема

Пытаюсь добавить security-заголовок в имеющееся SOAP-сообщение вызовом org.apache.ws.security.message.WSSecHeader.insertSecurityHeader(). Получаю ошибку:
org.apache.axiom.soap.SOAPProcessingException: SOAP Envelope can not have children other than SOAP Header and Body at org.apache.axiom.soap.impl.dom.SOAPEnvelopeImpl.checkChild(SOAPEnvelopeImpl.java:110)
at org.apache.axiom.soap.impl.dom.SOAPEnvelopeImpl.insertBefore(SOAPEnvelopeImpl.java:164)
at org.apache.ws.security.util.WSSecurityUtil.prependChildElement(WSSecurityUtil.java:646)
at org.apache.ws.security.util.WSSecurityUtil.findWsseSecurityHeaderBlock(WSSecurityUtil.java:722)
at org.apache.ws.security.message.WSSecHeader.insertSecurityHeader(WSSecHeader.java:145)
at ru.croc.security.jcp.JCPSigner.sign(JCPSigner.java:63)
... 26 more
Решение

WSS4J почему-то так странно реагирует на отсутствие блока <soapenv:Header/> в SOAP-конверте. Если его туда добавить (пусть даже пустым) перед вызовом insertSecurityHeader - ошибка пропадает.

Комментариев нет:

Отправить комментарий