6

私はrubyとSavonを使用してWebサービスを利用しようとしています。

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

'rubygems'が必要
'savon'が必要

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

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

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

ありがとう、

4

2 に答える 2

6

これは、Savon が名前空間を処理する方法に問題があります。この回答を参照してくださいWhy is "wsdl" namespace interjected into action name when using savon for ruby​​ soap communication?

これを解決するには、特に 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
于 2010-08-10T22:47:01.567 に答える
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
于 2012-10-12T08:52:17.550 に答える