soap4rでSOAPクライアント:WSDLファイルをローカルに配置

RoRからSOAPを使うということでsoap4rをお試し。
苦労したのがWSDL(SOAP)ドライバを生成するところで、サンプルをみると、WSDLのURLを指定するとなっている。

  wsdl = 'http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.1/'
  raa = SOAP::WSDLDriverFactory.new(wsdl).createDriver

ところが、今回使うWebAPIでは、複数稼動しているサーバに対して1つのWSDLで対応するため
soap:address locationが変数名になっていて、そこを書き換える必要がある。


 ↓

なので、事前にWSDLをローカルにDLして、エディタで書き換えを行ったものを使う。これを指定する方法にてこずった。。
結果的には、ファイルのパスをURLの代わりに引数として渡せばOKだった。

  wsdlpath = File.join(RubricksLib::COMPONENT_DIR,"my_component","ws_api.wsdl")
  soapdriver = SOAP::WSDLDriverFactory.new(wsdlpath).createDriver

自分のコンポーネント直下にWSDLファイルを配置している。で、そこのコンポーネントのパスをRubricksLib::COMPONENT_DIRというのを活用して取得している。(最初は"./ws_api.wsdl"とか四苦八苦。Rubricks様様)