Я имею дело с вызовом веб-службы 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([]))
Все, что я действительно знаю, это то, что у меня есть метод, который принимает определенные параметры .... Я действительно не понимаю, почему, если этот метод делает то, что я думаю, он должен быть более сложным. Разве это не вопрос того, чтобы брать одни и те же данные и форматировать их по-разному? Я так растерялся ....