0

Я разрабатываю клиент веб-сервиса.получает «необработанный элемент заголовка mustUnderstand» при создании клиента веб-службы

Unprocessed 'mustUnderstand' header element: {http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security 

Везде, где он прекрасно работает с SoapUI, возвращает соответствующий ответ со следующим заголовком:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <S:Header> 
     <wsse:Security S:mustUnderstand="1"> 
     <wsu:Timestamp wsu:Id="XWSSGID-13660988101781895308327" xmlns:ns15="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity" xmlns:ns14="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512" xmlns:ns13="http://www.w3.org/2003/05/soap-envelope"> 
      <wsu:Created>2013-04-16T08:02:05Z</wsu:Created> 
      <wsu:Expires>2013-04-16T08:07:05Z</wsu:Expires> 
     </wsu:Timestamp> 
     </wsse:Security> 
    </S:Header> 

Я не могу использовать WsHttpBinding. Мой запрос:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <env:Header> 
     <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <wsse:UsernameToken> 
      <wsse:Username>wstest</wsse:Username> 
      <wsse:Password>wstest</wsse:Password> 
     </wsse:UsernameToken> 
     </wsse:Security> 
    </env:Header> 
    <env:Body> 
    <-- client method call implementation> 
    </env:Body> 
</env:Envelope> 

, пожалуйста, помогите мне в этом.

ответ

0

В методе getHeaders() вам нужно вернуть элемент XML, который будет содержать корневой элемент. В этом случае, я бы построить QName элемент со следующим конкретизации и добавить в набор и вернуться, что в элементе getHeaders:

@Override 
public Set<QName> getHeaders(){ 
Set<QName> headers = new HashSet<QName>(); 
QName ck = new QName("http://coldyak.com", "coldyak", "cyk"); 
headers.add(ck); 
return headers; 
} 

Это все, что необходимо для обработки атрибута MustUnderstand. Это похоже на контракт, который принуждает веб-сервис обрабатывать элемент заголовка.

+0

Я не думаю, что этот ответ связан с вопросом. Вообще. Чувствует, что вы просто сбрасываете то, что вы когда-то использовали, потому что однажды у вас было подобное сообщение об ошибке. – sehe

+0

wtf is coldyak? –

+1

@LightnessRacesinOrbit - что-то, что происходит в тибетской зиме? –