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 开发者_JAVA百科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.
精彩评论