Как передать массив как параметр в SOAP в Ruby - PullRequest
2 голосов
/ 17 июля 2010

В настоящее время я использую Savon для работы с WebService в ruby. Это работает довольно хорошо, но мне трудно передать параметр для аргумент типа массива SOAP. Следующий код не работает должным образом:

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

Буду признателен, если вы решите мою проблему или предложите альтернативу библиотека для рубина и мыла

Ответы [ 2 ]

7 голосов
/ 19 июля 2010

Я только что наткнулся на ту же проблему, и временный обходной путь, который работал для меня, следующий:

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
1 голос
/ 12 мая 2014

У меня была похожая проблема.Мне пришлось отправить массив строк в качестве двух аргументов запроса.Я использовал 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 и проверить, как должны выглядеть правильные запросы.

...