私はWebサービスに非常に慣れていません。
私は 1 つの 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のモジュールも書いた
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つのログはリクエストとレスポンスの両方で完全です。
誰かがそれに対する良い解決策を提案できるなら、それは役に立ちます。