【发布时间】:2014-11-11 14:40:16
【问题描述】:
我有一个需要与之交谈的 SOAP 服务。第一个 SOAP 请求在 SOAP 标头中收到带有 sessionID 元素的响应,我需要在最终发布命令中发送该响应。
为了获取这个 sessionID 值,我计划使用 ClientInterceptor。在我的 WebServiceGatewaySupport 实现中,我注册了我的拦截器:
this.setInterceptors(new ClientInterceptor[] { new MyWebServiceClientInterceptor() });
我的拦截器:
public class MyWebServiceClientInterceptor implements ClientInterceptor {
public final QName SessionID_QNAME = new QName("http://xml.example.com/ws/session", "sessionID");
public boolean handleFault(MessageContext context) throws WebServiceClientException {
logger.info("Handle Fault");
return true;
}
public boolean handleResponse(MessageContext context) throws WebServiceClientException {
logger.info("Handle Response");
SoapMessage soapMessage = (SoapMessage) context.getRequest();
SoapHeader soapHeader = soapMessage.getSoapHeader();
logger.info("Response Header: " + soapHeader.getName());
Iterator<SoapHeaderElement> qn = soapHeader.examineAllHeaderElements();
while (qn.hasNext()) {
SoapElement elem = qn.next();
logger.info(elem.toString());
}
Iterator<QName> an = soapHeader.getAllAttributes();
while (an.hasNext()) {
QName elem = an.next();
logger.info(elem.toString());
}
return true;
}
public boolean handleRequest(MessageContext context) throws WebServiceClientException {
logger.info("Handle Request");
return true;
}
}
但是,我不断返回一个空的 SOAP 标头。我正在运行 Wireshark,并且可以清楚地看到返回的 SOAP 数据包中的 sessionID 令牌,因此不知道发生了什么。有什么想法吗?
【问题讨论】:
-
是Soap头还是Http头?不同的东西...
标签: java spring web-services soap interceptor