4


0

ルビーとサボンで石鹸サービスを消費する

ルビーとサボンを使用してWebサービスを消費しようとしています。

テストサービスはhttp://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2です

require 'rubygems'
require 'savon'

client = Savon::Client.new "http://www.webservicex.net/stockquote.asmx?WSDL"
client.get_quote do |soap|
  soap.body = {:symbol => "AAPL"}
end

SOAP例外を返します。 soapエンベロープを調べると、soapリクエストに正しい名前空間が含まれていないように見えます。

誰も私がこの仕事をするためにできることを提案できますか? 他のWebサービスエンドポイントにも同じ問題があります。

ありがとう、

2 Answer


5


これは、Savonがネームスペースを処理する方法の問題です。 この回答を参照https://stackoverflow.com/questions/2294325/why-is-wsdl-namespace-interjected-into-action-name-when-using-savon-for-ruby-so [なぜ「wsdl」名前空間が挿入されるルビー石鹸の通信にsavonを使用する場合のアクション名に追加しますか?]

これを解決するには、具体的にsoap.inputを呼び出して配列を渡します。最初の要素はメソッドで、2番目は名前空間を含むハッシュです

require 'rubygems'
require 'savon'

client = Savon::Client.new "http://www.webservicex.net/stockquote.asmx?WSDL"
client.get_quote do |soap|
  soap.input = [
    "GetQuote",
    { "xmlns" => "http://www.webserviceX.NET/" }
  ]
  soap.body = {:symbol => "AAPL"}
end


2


最新のgemでは、メソッド "request"に続いて、必要なメソッドへのシンボル参照が使用されている場合があります。

require 'rubygems'
require 'savon'

client = Savon::Client.new "http://www.webservicex.net/stockquote.asmx?WSDL"
client.request :get_quote do |soap|
    soap.input = [
    "GetQuote",
    { "xmlns" => "http://www.webserviceX.NET/" }
    ]
    soap.body = {:symbol => "AAPL"}
end