Oct 17, 2010

[Library] Apache Axis2 で SOAP Request/Response を GZIP 圧縮する方法

Apache Axis2 で SOAP Request/Response を GZIP 圧縮する方法をメモ。

コード

Options を生成し、Stub (実際には WSDL から自動生成された Stub のサブクラス) にセットする。 MC_GZIP_REQUEST が SOAP Request の圧縮可否。 MC_ACCEPT_GZIP が SOAP Response の圧縮可否。 詳細は下記のリンクを参照のこと。

Stub stub = 
Options options = new Options();
options.setProperty(HTTPConstants.MC_GZIP_REQUEST, true);
options.setProperty(HTTPConstants.MC_ACCEPT_GZIP, true);
stub._getServiceClient().setOverrideOptions(options);
Options#setProperty
http://ws.apache.org/axis2/1_5_1/api/org/apache/axis2/client/Options.html#setProperty(java.lang.String,%20java.lang.Object)
HTTPConstants
http://ws.apache.org/axis2/1_5_1/api/org/apache/axis2/transport/http/HTTPConstants.html

動作確認

Apache Axis2 で HTTP Request/Response を確認する方法 でログを出力すると、以下のヘッダを確認できる。

2010-10-17 23:56:29,026 DEBUG [main] (Wire.java:70) - >> "Accept-Encoding: gzip[\r][\n]"
2010-10-17 23:56:29,026 DEBUG [main] (Wire.java:70) - >> "Content-Encoding: gzip[\r][\n]"
ちなみに、某サービスの軽量 SOAP 通信で GZIP 圧縮を ON にしてみたところ通信速度が 30% 速くなった。 サービスが GZIP 圧縮に対応しており、クライアントの CPU に余裕があれが是非 ON にしておきたい。
但し、GZIP 圧縮を ON にするとログに出力される SOAP Request/Response の目視での確認は困難になる。 デバッグの際には OFF にする必要がある。