这是很老的线程,但最近我遇到了类似的问题。我正在从一个休息服务调用一个下游肥皂服务,我需要按原样返回来自下游服务器的 xml 响应。
所以,我最终添加了一个 SoapMessageContext 处理程序来获取 XML 响应。然后我将响应 xml 作为属性注入到 servlet 上下文中。
public boolean handleMessage(SOAPMessageContext context) {
// Get xml response
try {
ServletContext servletContext =
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getServletContext();
SOAPMessage msg = context.getMessage();
ByteArrayOutputStream out = new ByteArrayOutputStream();
msg.writeTo(out);
String strMsg = new String(out.toByteArray());
servletContext.setAttribute("responseXml", strMsg);
return true;
} catch (Exception e) {
return false;
}
}
然后我在服务层检索了 xml 响应字符串。
ServletContext servletContext =
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest().getServletContext();
String msg = (String) servletContext.getAttribute("responseXml");
还没有机会对其进行测试,但这种方法必须是线程安全的,因为它使用的是 servlet 上下文。