SOAP :: RPC :: Проблемы с форматированием драйверов. Как я могу это изменить? - PullRequest
0 голосов
/ 09 июля 2009

Я имею дело с вызовом веб-службы SOAP с сервера, который ожидает приема вызовов методов с параметрами в формате:

<urn:offeringId> 354 </urn:offeringId>

Но SOAP :: RPC :: Driver генерирует сообщения в виде:

<offeringId xsi:type = "xsd:int">354</offeringId>

Сервер продолжает выдавать ошибки при получении этих сообщений (тем более что он ожидает, что offerId будет внутренним по отношению к самому себе пользовательским типом, а не целым).

Есть ли способ настроить драйвер для форматирования вещей так, как этого ожидает сервер. Сервер вообще делает SOAP? У меня проблемы с поиском ссылки на этот стиль форматирования для SOAP (я знаю, что он работает, хотя, поскольку SOAPUI прекрасно работает с этим типом сообщения).

-Jenny

Редактировать: По крайней мере, часть из этого решена. RPC :: Driver (очевидно) использует стандарт RPC, тогда как, очевидно, сервер, с которым я пытаюсь поговорить, выполняет "документ". Теперь, когда я смотрю на API RPC :: Driver, я вижу метод с именем "add_document_method". Это звучит мне так, как будто это то, чего я хочу, но я не могу понять, какие параметры дать. Примеры, которые я видел в сети, не имеют для меня большого смысла, например:

def GetNamePair(response)
  response.account.each do |x| 
    class << x
      attr :configuration, true    
    end     
    x.configuration = Hash[*x.a.map do |y|
      [y.__xmlattr[XSD::QName.new(nil, 'n')], String.new(y)]
    end.flatten] 
  end
end

mNS = 'urn:zimbraAdmin'
drv.add_document_method('GetAllAdminAccountsRequest', mNS, [XSD::QName.new(mNS, 'GetAllAdminAccountsRequest')],  
  [XSD::QName.new(mNS, 'GetAllAdminAccountsResponse')] )  

puts YAML.dump(GetNamePair(drv.GetAllAdminAccountsRequest([]))

Все, что я действительно знаю, это то, что у меня есть метод, который принимает определенные параметры .... Я действительно не понимаю, почему, если этот метод делает то, что я думаю, он должен быть более сложным. Разве это не вопрос того, чтобы брать одни и те же данные и форматировать их по-разному? Я так растерялся ....

1 Ответ

0 голосов
/ 21 июля 2009

Хорошо, я закончил тем, что использовал SOAP: RPC: Drivers add_document_method, который требует, чтобы я присвоил ему wsdl, пространство имен и т. Д., А затем передал ему атрибуты в виде единой входной хеш-вещи (и дает мне вывод в аналогичном формате). Это сработало, но оно не было таким чистым, как add_rpc_method (по умолчанию это add_method)

-Jenny

...