简体   繁体   中英

How to pass Array as parameter to SOAP in Ruby

Currently I'm using Savon to work with WebService in ruby. It works pretty well but I have difficulty to pass parameter for argument of SOAP array type. Following code doesn't work properly:

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

I would appreciate if you can solve my problem or propose an alternative library for ruby&soap

I just stumbled on the same problem and the temporary workaround that worked for me is as follows:

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

The names "item1", "item2" shouldn't matter at all.

I use the following helper method to convert regular arrays into SOAP mess:

def soap_array(array)
  returning({}) do |hash|
    array.each_with_index do |e, i|
      hash["item-#{i}"] = e
    end
  end
end

I had a similar problem. I had to send array of strings as two of the request's arguments. I used Savon version 2. My final solution looks like this:

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

What helped me to find the right solution was downloading SOAP UI and checking how proper requests should look like.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM