联通のSMS送受信APIをRubyで作る

SMS配信サービス開始に向けてRubySOAP Clientを作っています。
中国では3キャリアあり、それぞれ異なるAPIを使う必要があります。
移動、電信ともにJava APIなのですが、联通はSOAPです。

いきなりコード。

  1 LoginMes = {"login" => {"username" => '1111111111', "userType" => '0', "password" => '111111',"corpID" => '111111'}}  
  2
  3 
  4 require 'rubygems'
  5 gem 'soap4r'
  6 require 'soap/rpc/driver'
  7 require 'soap/wsdlDriver' 
  8 p SOAP::Version
  9 
 10 wsdl = '联通APIのURL/SmWSImpl?wsdl'
 11 
 12 a = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver
 13 a.generate_explicit_type = true
 14 result = a.memberLogin(LoginMes)
 15
 16 
 17 p result.exitCode
 18 

実行結果

"1.5.8"
0

いや、はまりました。
ruby 1.8.7標準添付のsoap4r (1.5.5)でテストしても動作しない。
エラーは下記。

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/soap/mapping/wsdlencodedregistry.rb:167:in `struct2soap': undefined method `elements' for nil:NilClass (NoMethodError)


途方に暮れていたのですが、soap4rを1.5.8にバージョンアップしたところあっさり動作。
サーバの環境構築もそうですが、バージョン関係は難しいですね。
オープンソース開発者の皆様に感謝!