1

私は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つのログはリクエストとレスポンスの両方で完全です。

誰かがそれに対する良い解決策を提案できるなら、それは役に立ちます。

4

1 に答える 1

1

ハンドラーを IN/OUT フローの両方に登録するため、リクエストとレスポンスがログに記録されます。

たとえば、out フローでハンドラーを登録すると、関連する要求と応答を選択できるようになります。つまり、応答メッセージのコンテキストから、要求メッセージのコンテキストにアクセスできます。そこから、リクエスト メッセージを読むことができます。[1]

ただし、ここで問題が発生します。リクエストが失敗した場合、アウトフローでそれをキャプチャできません。そのログは失われる可能性があります。

[1] http://vvratha.blogspot.com/2013/05/accessing-request-messagecontext-from.html

于 2013-10-25T07:40:40.203 に答える