我正在处理来自服务器的 SOAP webservice 调用,该服务器期望接收具有以下格式的参数的方法调用:
<urn:offeringId> 354 </urn:offeringId>
但是 SOAP::RPC::Driver 正在生成以下形式的消息:
<offeringId xsi:type = "xsd:int">354</offeringId>
服务器在收到这些消息时会不断出错(特别是因为它期望 offerId 是其自身内部的自定义类型,而不是 int)。
无论如何配置驱动程序以按照服务器期望的方式格式化事物。服务器甚至在做 SOAP 吗?我很难找到对 SOAP 格式格式的引用(我知道它确实有效,因为 SOAPUI 可以很好地处理这种类型的消息)。
-珍妮
编辑:我至少已经解决了一部分。RPC::Driver (显然)使用 RPC 标准,而显然我试图与之交谈的服务器正在执行“文档”。现在,当我查看 RPC::Driver 的 API 时,我看到了一个名为“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([]))
我真正知道的是我有一个接受某些参数的方法......我真的不明白为什么,如果这个方法做了我认为它做的事情,它必须更复杂。这不只是获取完全相同的数据并以不同的方式格式化它的问题吗?我很混乱....