#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