2

目前我正在使用Savon在 ruby​​ 中使用 WebService。它工作得很好,但我很难为 SOAP 数组类型的参数传递参数。以下代码无法正常工作:

ids = [0,1,2]
client.do_get_items { |soap| soap.body = {
    'item-list' => ids
}

如果您能解决我的问题或为 ruby​​&soap 提出一个替代库,我将不胜感激

4

2 回答 2

7

我只是偶然发现了同样的问题,对我有用的临时解决方法如下:

ids = [0,1,2]
client.do_get_items { |soap| soap.body = {
  'item-list' => {
    'item1' => 0,
    'item2' => 1,
    'item3' => 2
  }  
}

名称“item1”、“item2”根本不重要。

我使用以下辅助方法将常规数组转换为 SOAP 混乱:

def soap_array(array)
  returning({}) do |hash|
    array.each_with_index do |e, i|
      hash["item-#{i}"] = e
    end
  end
end
于 2010-07-19T17:37:38.463 回答
1

我有一个类似的问题。我必须将字符串数组作为请求的两个参数发送。我使用了 Savon 版本 2。我的最终解决方案如下所示:

class JvMatching

    CLIENT_ID = 'bb_matchnig'

    extend Savon::Model

    operations :query_index

    # arg1, arg 2 - name of parameters that should be arrays of string
    def self.query_index(contents=[], constraints=[], focus='job', result_size=20)
        super(message: { arg0: CLIENT_ID, arg1: { item: contents }, arg2: { item: constraints }, arg3: focus, arg4: result_size })      
    end  

end

帮助我找到正确解决方案的是下载SOAP UI并检查正确的请求应该是什么样子。

于 2014-05-12T16:57:28.647 回答