2010-08-10 5 views
4

J'essaie d'utiliser ruby ​​et Savon pour consommer un service web.consommer du savon avec ruby ​​et savon

Le service de test est 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 

qui renvoie une exception SOAP. Inspecter l'enveloppe de savon, il me semble que la demande de savon n'a pas l'espace de noms correct (s). Est-ce que quelqu'un peut suggérer ce que je peux faire pour que cela fonctionne? J'ai le même problème avec d'autres points de terminaison de service Web.

Merci,

Répondre

5

Ceci est un problème avec la façon poignées namespaces. Savon Voir cette réponse Why is "wsdl" namespace interjected into action name when using savon for ruby soap communication?

Vous pouvez résoudre ce problème en appelant spécifiquement soap.input et le passage d'un tableau, le premier élément est la méthode et le second est un hachage contenant l'espace de noms (s)

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 
1

Vous pourrait trouver que la dernière gem utilise la méthode "request" suivie de la référence du symbole à la méthode requise.

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