пример spring ws clientinterceptor

#spring-ws

#spring-ws

Вопрос:

Мне нужно добавить пользовательский заголовок soap к исходящему сообщению soap в клиенте spring ws 2.0.

Я использую клиентский перехватчик следующим образом…..

 public class MyWebServiceClientInterceptor implements ClientInterceptor {

    private QName qname = new QName(WEB_SERVICE_NAMESPACE, SOAP_HEADER_PART);
    private String testText = "<userName>myUser</userName><role>everything</role>";

    @Override
    public boolean handleRequest(MessageContext context) throws WebServiceClientException {
        SoapMessage soapMessage = (SoapMessage) context.getRequest();
        SoapHeader soapHeader = soapMessage.getSoapHeader();
        SoapHeaderElement newHeader = soapHeader.addHeaderElement(qname);
        newHeader.setActorOrRole(MY_SOAP_ACTOR);
        newHeader.setText(testText);
        return true;
    }
}  
  

Я подтвердил, что перехватчик вызван, но заголовок, похоже, не добавляется. Должен ли я выполнять какую-то «фиксацию», чтобы применить заголовок к сообщению????

Ответ №1:

Нет, вам не нужно выполнять какой-либо тип фиксации. Я делаю более или менее то же самое (хотя я вызываю это изнутри метода sendAndRecieve шаблона WS:

             SoapMessage soapMessage = (SoapMessage) message;
        SoapHeader soapHeader = soapMessage.getSoapHeader();
        QName qname = QNameUtils.createQName(...,...);
        SoapHeaderElement element = soapHeader.addHeaderElement(qname);
        element.setText(text);
  

Вы пробовали включить ведение журнала сообщений, чтобы посмотреть, как выглядит сообщение на самом деле, когда оно отправляется?

Вы можете сделать это, создав log4j.properties и добавив эти строки:

 #log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE
#log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE