代码之家  ›  专栏  ›  技术社区  ›  jethro

如何在Ruby中将数组作为参数传递给SOAP

  •  2
  • jethro  · 技术社区  · 15 年前

    目前我正在使用 Savon 使用Ruby中的WebService。 它工作得很好,但是我很难通过参数 SOAP数组类型的参数。以下代码无法正常工作:

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

    如果你能解决我的问题或提出一个替代方案,我将不胜感激 Ruby&Soap库

    2 回复  |  直到 11 年前
        1
  •  7
  •   Jacek Becela    15 年前

    我只是偶然发现了同样的问题,为我工作的临时解决方法如下:

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

    名称“item1”、“item2”一点也不重要。

    我使用以下助手方法将常规数组转换为SOAP mess:

    def soap_array(array)
      returning({}) do |hash|
        array.each_with_index do |e, i|
          hash["item-#{i}"] = e
        end
      end
    end
    
        2
  •  1
  •   wawka    11 年前

    我也有类似的问题。我必须发送字符串数组作为请求的两个参数。我用的是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 并检查正确请求的外观。

    推荐文章