Как устранить ошибку вызова веб-службы JAX_WS «Заголовки MustUnderstand не поняты»? - PullRequest
8 голосов
/ 06 декабря 2010

Я использую инструмент SOAPUI для доступа к веб-сервисам JAX-WS, развернутым в Weblogic 10.3.2

Запрос:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.pc3.polk.com/"> <soapenv:Header> <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsu:Timestamp wsu:Id="Timestamp-1" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsu:Created>2010-12-03T21:10:43Z</wsu:Created> <wsu:Expires>2010-12-03T21:44:03Z</wsu:Expires> </wsu:Timestamp> <wsu:Timestamp wsu:Id="Timestamp-60" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsu:Created>2010-12-03T20:10:39Z</wsu:Created> <wsu:Expires>2010-12-03T20:43:59Z</wsu:Expires> </wsu:Timestamp> <wsse:UsernameToken wsu:Id="UsernameToken-59" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:Username>rwerqre</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">ewrqwrwerqer</wsse:Password> <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">Nmw0ksmiOX+hkiSoWb2Rjg==</wsse:Nonce> <wsu:Created>2010-12-03T20:10:39.649Z</wsu:Created> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <ws:getMetadata/> </soapenv:Body> </soapenv:Envelope>

Ответ:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <SOAP-ENV:Fault xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
         <faultcode>SOAP-ENV:MustUnderstand</faultcode>
         <faultstring>MustUnderstand headers:[{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security] are not understood</faultstring>
      </SOAP-ENV:Fault>
   </S:Body>
</S:Envelope>

Ответы [ 5 ]

9 голосов
/ 07 декабря 2010

Вы можете настроить фиктивный SOAPHandler для {http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security, который бы пометил этот заголовок как «понятый».

Или вы можете изменить SOAP-запрос (на стороне вызывающего абонента) на mustUnderstand="0" в заголовке безопасности.

Пример безопасности SOAP-заголовка с mustUnderstand="0":

<S:Header xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <wsse:Security S:mustUnderstand="0" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <wsse:UsernameToken>
         <wsse:Username>USERNAME</wsse:Username>
         <wsse:Password wsse:Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASSWORD</wsse:Password>
      </wsse:UsernameToken>
   </wsse:Security>
</S:Header>
7 голосов
/ 15 февраля 2014

После долгих исследований эта статья решает эту проблему.

http://dwuysan.wordpress.com/2012/04/02/jax-ws-wsimport-and-the-error-mustunderstand-headers-not-understood/#comment-215

2 голосов
/ 20 декабря 2017

Проблема с обработчиками. Вам нужно добавить следующее в реализацию обработчика

public Set<QName> getHeaders() {
    final QName securityHeader = new QName(
        "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
        "Security",
        "wsse");

    final HashSet headers = new HashSet();
    headers.add(securityHeader);
    return headers;
}
2 голосов
/ 30 июня 2011

Согласно спецификации безопасности WS: Процессор ДОЛЖЕН, после расшифровки зашифрованного блока заголовка, обработать дешифрованный блок заголовка в соответствии с рекомендациями по обработке SOAP. Получатель ДОЛЖЕН выдавать ошибку, если какой-либо контент, необходимый для адекватной обработки блока заголовка, остается зашифрованным или если расшифрованный заголовок SOAP не понят и значение атрибута S12: mustUnderstand или S11: mustUnderstand в расшифрованном блоке заголовка равно true. Обратите внимание, что для соблюдения правил обработки SOAP в этом случае процессор должен откатить любые постоянные эффекты обработки заголовка безопасности, такие как сохранение полученного токена. Поэтому, пожалуйста, проверьте конфигурацию CallbackHandlers.

0 голосов
/ 16 ноября 2016

В SOAP UI Navigator,

щелкните правой кнопкой мыши свой проект-> Показать представление проекта-> Конфигурации WS-Security-> Исходящие конфигурации WS-Security Снимите отметку Необходимо понять, а затем отправить запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...