0

CXF 動的クライアントを使用しており、ログを記録したいと考えています。着信および発信の SOAP xml をログに記録したいと考えています。インターセプターでそれを行う必要がありますが、それらを配線する方法がわからないので、クライアントはそれを使用します。

コード例:

    MyWebservice ws = new MyWebservice_Service().getChargePointServiceSoap12();

このクライアントにインターセプターを追加するにはどうすればよいですか?

4

1 に答える 1

4

メッセージを出力するには、次のような Interceptor を作成します。

import java.io.InputStream;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;

public class LogInterceptor extends AbstractPhaseInterceptor<Message> {

    public LogInterceptor() {
        super(Phase.PRE_INVOKE);
    }

    @Override
    public void handleMessage(Message message) throws Fault {
        InputStream contentInputStream = message.get(InputStream.class);
        // Do whatever you want with the content (the soap xml)
    }

    public void addInterceptor(Object portType) {
        Client client = ClientProxy.getClient(portType);
        client.getInInterceptors().add(this);
    }
}

コードで addInterceptor を呼び出す必要があります。

MyWebservice ws = new MyWebservice_Service().getChargePointServiceSoap12();
LogInterceptor logInterceptor = new LogInterceptor();
logInterceptor.addInterceptor(ws);

最後に、収入メッセージの場合、インターセプターのコンストラクターのフェーズを変更します。

ドキュメント: http://cxf.apache.org/docs/interceptors.html

于 2013-04-05T02:41:01.647 に答える