2010-12-06 1 views
6

Я использую SoapUI инструмент для доступа к веб-службам JAX-WS, развернутые в Weblogic 10.3.2Как разрешить сбой вызова веб-службы JAX_WS «Заголовки MustUnderstand не поняты»?

Запрос:

<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> 

ответ

7

Вы можете настроить манекен 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> 
+1

Я хотел бы видеть более подробную информацию о «настройке фиктивный SOAPHandler для {http://docs.oasis-open.org/wss/2004/01/oasis-200401 -wss-wssecurity-secext-1.0.xsd} Безопасность, которая бы маркировала этот заголовок как «понятый». – Jono 2014-02-10 21:15:46

+1

Я также хотел бы видеть такой манекен SOAP Handler – Frizz 2014-06-26 07:28:32

+2

Просто реализуйте [SOAPHandler] (http://docs.oracle.com/javaee/5/api/javax/xml/ws/handler/soap/SOAPHandler.html), который возвращает `{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd} Security` из` getHeaders() `, но чей` handle. .` ничего не делают (верните true). Вот и все. – rustyx 2014-06-27 12:36:27

2

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

-1

В SOAP UI Navigator,

правой кнопкой мыши project-> Show View- Project> WS-Security Configurations-> Исходящий Конфигурации WS-Security Снимите флажок должны понимать, а затем послать запрос.

0

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

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; 
} 
Смежные вопросы