SOAP :: RPC :: Driver格式化问题。我该怎么改变它?

时间:2009-07-09 12:37:54

标签: ruby soap soap-client

我正在处理来自服务器的SOAP webservice调用,该服务器期望使用以下格式的参数接收方法调用:

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

但SOAP :: RPC :: Driver正在以下列形式生成消息:

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

服务器在收到这些消息时会一直出错(特别是因为它希望provideId是自身内部的自定义类型,而不是int)。

无论如何都要配置驱动程序以按照服务器期望的方式格式化事物。服务器甚至在做SOAP吗?我很难找到SOAP的格式化参考(我知道它可以工作,因为SOAPUI可以很好地处理这种类型的消息)。

-Jenny

编辑:我已经解决了至少部分问题。 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([]))

所有我真正知道的是我有一个接受某些参数的方法....我真的不明白为什么,如果这个方法做了我认为它做的,它必须更复杂。这不仅仅是采用完全相同的数据并以不同的方式形成它吗?我很困惑......

1 个答案:

答案 0 :(得分:0)

好吧,我最终做的是使用SOAP:RPC:Drivers add_document_method,这需要我给它wsdl,命名空间等,然后将它作为单个输入哈希东西给它后面的属性(并给我以类似的格式输出)。它工作,它不像add_rpc_method那样干净(这是默认的add_method)

-Jenny