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様様)