потреблять мыло с рубином и савоном - PullRequest
4 голосов
/ 11 августа 2010

Я пытаюсь использовать ruby ​​и Savon для использования веб-службы.

Служба тестирования 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. Осматривая мыльный конверт, мне кажется, что у запроса на мыло нет правильного пространства имен.

Кто-нибудь может подсказать, что я могу сделать, чтобы эта работа? У меня такая же проблема и с другими конечными точками веб-сервиса.

Спасибо

Ответы [ 2 ]

5 голосов
/ 11 августа 2010

Это проблема с тем, как Savon обрабатывает пространства имен. См. Этот ответ Почему пространство имен "wsdl" вставляется в имя действия при использовании savon для связи с ruby ​​мылом?

Вы можете решить эту проблему, специально вызвав soap.input и передав ему массив, первый элемент - это метод, а второй - хеш, содержащий пространство (имена)

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 голосов
/ 12 октября 2012

Вы можете обнаружить, что последний драгоценный камень использует метод «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
...