前に、いくつかのJavaライブラリでSalesforceのSOAP 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のやり取りでSalesforceのSOAP APIを利用するサンプルを書きたいと思います。