我对 Web 服务非常陌生。
我有一个 Web 服务公开,所以客户端正在使用它,但由于服务的重要性,我们希望记录 SOAP 请求和 SOAP 响应流入和流出。
我正在使用 Axis2-1.6.2 这是我到目前为止所尝试的,我编写了一个自定义处理程序和模块类
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.engine.Handler;
import org.apache.axis2.handlers.AbstractHandler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class LogHandler extends AbstractHandler implements Handler {
private static final Log log = LogFactory.getLog(LogHandler.class);
private String name;
public String getName() {
System.out.println("LogHandler.getName()");
return name;
}
public InvocationResponse invoke(MessageContext msgContext) throws AxisFault {
log.info(msgContext.getEnvelope().toString());
System.out.println("LogHandler.invoke()");
return InvocationResponse.CONTINUE;
}
public void revoke(MessageContext msgContext) {
System.out.println("LogHandler.revoke()");
log.info(msgContext.getEnvelope().toString());
}
public void setName(String name) {
System.out.println("LogHandler.setName()");
this.name = name;
}
}
我还为上面的 Handler 写了 Module
public class LoggingModule implements Module {
//implemented methods
}
从上面的处理程序,我能够记录传入的 SOAP 请求和传出的 SOAP 响应。
但问题是,我一次收到很多请求,所以如果我写的是普通请求和响应,那么在查看日志时我无法确定谁的响应是这个。
它写的一般日志
Request1 SOAP
Request2 SOAP
Response1 SOAP
Request3 SOAP
Request4 SOAP
Response2 SOAP
invoke(MessageContext msgContext)
当请求进来和响应出去时,这个方法被调用。有什么我可以在调用响应时间时获取请求 SOAP。
所以,我想要一些解决方案,我可以在响应 SOAP 中合并请求 SOAP,所以 1 日志是完整的请求响应。
如果任何机构可以提出一些好的解决方案,那将是有帮助的。