我是Web Service的新手。
我有一个Web服务公开,所以客户端正在使用它,但由于服务的重要性,我们希望Log SOAP Request和SOAP Response流入IN和OUT。
我正在使用Axis2-1.6.2 这是我到目前为止尝试过的,我编写了一个自定义Handler和Module类
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编写了模块
public class LoggingModule implements Module {
//implemented methods
}
从Handler上面,我能够记录传入SOAP请求和传出SOAP响应。
但是问题是,我一次收到很多请求,所以如果我写了Plain Request and Response,那么在查看Logs时我无法确定响应是什么。
记录一般写入
Request1 SOAP
Request2 SOAP
Response1 SOAP
Request3 SOAP
Request4 SOAP
Response2 SOAP
invoke(MessageContext msgContext)
当请求进入并且响应消失时,将调用此方法。有什么我可以获得请求SOAP,而它被调用的响应时间。
所以,我想要一些解决方案,我可以在Response SOAP中整合Request SOAP,所以1 Log完成Request-Response。
如果任何机构可以建议一些好的解决方案,那将会有所帮助。
答案 0 :(得分:1)
您正在获取请求并记录响应,因为您在IN / OUT流程中注册了处理程序..
比如说,如果您在流出处注册处理程序,您将能够选择相关的请求和响应。也就是说,从响应messgaecontext,您可以访问您的请求消息上下文。从那里,您可以阅读您的请求消息。[1]
但是在这里您会看到一个问题,如果您的请求失败,您将无法在流出中捕获它。该日志可能会错过。
[1] http://vvratha.blogspot.com/2013/05/accessing-request-messagecontext-from.html