2011-06-02 81 views
0

我不明白那些喜歡薩翁的人喜歡Soap4r。如何處理薩翁響應?

如何在薩翁響應中獲取返回對象的屬性?用soap4r就像調用getter一樣乾淨!

顯然,在薩翁我需要明確解析響應並行走response_hash。這比soap4r方法更糟糕。我錯了,還是薩翁只是質量較差的soap4r?

編輯:這個問題是由於savon沒有正確支持multi_ref響應,正如答案評論中所述。

回答

1

https://github.com/raldred/savon/blob/master/lib/savon/response.rb

# You can also let Savon translate the SOAP response body to a Hash. 
    # 
    # response.to_hash 
    # => { :findUserByIdResponse => { 
    # => :id => "123", 
    # => :username => "eve" 
    # => :active => true 
    # => } 

所以,你應該能夠調用哈希[:對象]這將返回屬性。

你不需要走響應對象只是調用to_hash。

+0

問題是,當我試圖做到這一點時,我收到了一個非常奇怪的值,看起來像「#idN」高度嵌套的散列。試圖做一些像response.companyId這樣簡單的事情將會很複雜,不足以理解該屬性的值存在於散列中。如果我沒有錯,最接近我的是響應[:meta_refs] [:companyId],返回類似「#id3」的東西。 – 2011-06-03 09:52:26

+0

在Soap4r response.companyId只是作品!也許我給savon提供了錯誤的參數,因此無法以適當的方式處理響應。因爲我不知道命名空間應該是什麼,我只是做了一些像Client.new {wsdl.document =「wsdl的路徑」} – 2011-06-03 09:52:48

+1

也許查看文檔,您的響應對象應該用散列如果您在客戶端使用正確的參數。 – 2011-06-03 20:29:04