是否可以使用 WebServicesTemplate 和 Jxb2Marshaller 作为编组引擎查看 Spring WS 客户端的请求和响应?
我只是想记录 xml,不对原始 xml 执行任何操作。
请参阅spring-ws
文档:
http ://static.springsource.org/spring-ws/sites/2.0/reference/html/common.html#logging
您可以通过标准的 Commons Logging 界面记录消息:
要记录所有服务器端消息,只需将
org.springframework.ws.server.MessageTracing
记录器设置为 DEBUG 或 TRACE 级别。在调试级别,仅记录有效负载根元素;在 TRACE 级别上,整个消息内容。如果您只想记录发送的消息,请使用org.springframework.ws.server.MessageTracing.sent
记录器;或org.springframework.ws.server.MessageTracing.received
记录收到的消息。在客户端,存在类似的记录器:
org.springframework.ws.client.MessageTracing.sent
和org.springframework.ws.client.MessageTracing.received
.
能够弄清楚 - 如果您将这样的 ClientInterceptor 添加到 WebServicesTemplate 拦截器中:
package com.wuntee.interceptor;
import java.io.ByteArrayOutputStream;
import org.apache.log4j.Logger;
import org.springframework.ws.client.WebServiceClientException;
import org.springframework.ws.client.support.interceptor.ClientInterceptor;
import org.springframework.ws.context.MessageContext;
public class LoggerInterceptor implements ClientInterceptor {
private Logger logger = Logger.getLogger(this.getClass().getName());
public boolean handleFault(MessageContext context) throws WebServiceClientException {
return false;
}
public boolean handleRequest(MessageContext context) throws WebServiceClientException {
logger.info("handleRequest");
logRequestResponse(context);
return true;
}
public boolean handleResponse(MessageContext context) throws WebServiceClientException {
logger.info("handleResponse");
logRequestResponse(context);
return true;
}
private void logRequestResponse(MessageContext context){
try{
logger.info("Request:");
ByteArrayOutputStream out = new ByteArrayOutputStream();
context.getRequest().writeTo(out);
byte[] charData = out.toByteArray();
String str = new String(charData, "ISO-8859-1");
logger.info(str);
} catch(Exception e){
logger.error("Could not log request: ", e);
}
if(context.hasResponse()){
try{
logger.info("Response:");
ByteArrayOutputStream out = new ByteArrayOutputStream();
context.getResponse().writeTo(out);
byte[] charData = out.toByteArray();
String str = new String(charData, "ISO-8859-1");
logger.info(str);
} catch(Exception e){
logger.error("Could not log response: ", e);
}
}
}
}