从响应中读取自定义 header 值
Read custom header value from the response
当我从原始响应选项卡下的 Soap UI 发送请求时,我看到以下结果(查找附件)。现在在 AOP 控制器中,我想读取这个标记为红色的 header 值。怎么可能?提前致谢。
在我发送 soap 请求的应用程序中,我有 WebServiceTemplate
。我在此 Web 服务模板上应用了自定义拦截器 WebServiceInterceptor
(实现了 ClientInterceptor
接口)。在注入 MessageContext
的覆盖 afterCompletion
方法中,我能够从 SaajMessageHeader
.
中获取此 属性
代码如下所示:
@Configuration
public class MyWebServiceConfig {
@Bean(name = "myWSClient")
public WebServiceTemplate myWSClient() throws Exception {
WebServiceTemplate template = new WebServiceTemplate();
...
WebServiceInterceptor[] interceptors = { new WebServiceInterceptor() };
template.setInterceptors(interceptors);
return template;
}
private static class WebServiceInterceptor implements ClientInterceptor {
@Override
public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException {
...
return true;
}
@Override
public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException {
return true;
}
@Override
public boolean handleFault(MessageContext messageContext) throws WebServiceClientException {
return true;
}
@Override
public void afterCompletion(MessageContext messageContext, Exception ex) throws WebServiceClientException {
try {
SaajSoapMessage message = (SaajSoapMessage) messageContext.getResponse();
String []traceId = message.getSaajMessage().getMimeHeaders().getHeader("ITRACING_TRACE_ID");
if(traceId != null && traceId.length > 0){
process.setTraceId(traceId[0]);
}
} catch (Exception e) {
}
}
}
当我从原始响应选项卡下的 Soap UI 发送请求时,我看到以下结果(查找附件)。现在在 AOP 控制器中,我想读取这个标记为红色的 header 值。怎么可能?提前致谢。
在我发送 soap 请求的应用程序中,我有 WebServiceTemplate
。我在此 Web 服务模板上应用了自定义拦截器 WebServiceInterceptor
(实现了 ClientInterceptor
接口)。在注入 MessageContext
的覆盖 afterCompletion
方法中,我能够从 SaajMessageHeader
.
代码如下所示:
@Configuration
public class MyWebServiceConfig {
@Bean(name = "myWSClient")
public WebServiceTemplate myWSClient() throws Exception {
WebServiceTemplate template = new WebServiceTemplate();
...
WebServiceInterceptor[] interceptors = { new WebServiceInterceptor() };
template.setInterceptors(interceptors);
return template;
}
private static class WebServiceInterceptor implements ClientInterceptor {
@Override
public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException {
...
return true;
}
@Override
public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException {
return true;
}
@Override
public boolean handleFault(MessageContext messageContext) throws WebServiceClientException {
return true;
}
@Override
public void afterCompletion(MessageContext messageContext, Exception ex) throws WebServiceClientException {
try {
SaajSoapMessage message = (SaajSoapMessage) messageContext.getResponse();
String []traceId = message.getSaajMessage().getMimeHeaders().getHeader("ITRACING_TRACE_ID");
if(traceId != null && traceId.length > 0){
process.setTraceId(traceId[0]);
}
} catch (Exception e) {
}
}
}