プログラマ38の日記

主にプログラムメモです。

Java: JavaのWebServiceライブラリのクライアントプログラムでSOAPメッセージをデバッグする

前に、いくつかのJavaライブラリでSalesforceSOAP APIを扱うという内容を書きました。

 

crmprogrammer38.hatenablog.com

 

さらに追記で、上記のJavaライブラリでSOAPメッセージをデバッグするやり方になります。

 

Axis1.4

log4j.propertiesで指定します。なので、この呼び出しだけdebugするということができません。
また、debugにすると非常に処理時間が遅くなります。

log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.Threshold=DEBUG
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

Axis2

log4j.propertiesで指定します。なので、この呼び出しだけdebugするということができません。Axis1.4ほど処理時間が遅くなることはありません。

log4j.logger.httpclient.wire.header=DEBUG
log4j.logger.httpclient.wire.body=DEBUG

wsimport

システムプロパティで指定します。プログラム中でも、javaコマンドの引数でも可能です。

    System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true");
//2021/12/28 追記 上記でうまく動作しないことがあり次のようにコードでダイレクトに指定した。
   com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump = true;

apache cxf

プログラム内で指定します。

    Client client = ClientProxy.getClient(bp);
    client.getOutInterceptors().add(new LoggingOutInterceptor());
    client.getInInterceptors().add(new LoggingInInterceptor());

wsc

プログラム内で指定します。

    ConnectorConfig connectorConfig = new ConnectorConfig();
    connectorConfig.setPrettyPrintXml(true);
    connectorConfig.setTraceMessage(true);

 

 

上記でhttpヘッダ、SOAPメッセージがデバッグできます。リクエストに対してのレスポンスをxmlレベルで把握することで、例えば障害時の調査に役立ったりすると思います。

また、上記のxmlがわかればwsdlをプログラムコードに展開できないアーキテクチャでもhttp通信さえできればxmlでのやり取りでSOAP APIを利用することができます。

次の記事でxmlのやり取りでSalesforceSOAP APIを利用するサンプルを書きたいと思います。