【问题标题】:SOAP::RPC::Driver formatting problems. How can I change it?SOAP::RPC::驱动程序格式问题。我怎样才能改变它?
【发布时间】:2009-07-09 12:37:54
【问题描述】:

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

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

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

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

服务器在收到这些消息时会不断出错(尤其是因为它期望提供的 ID 是自身内部的自定义类型,而不是 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([]))

我真正知道的是我有一个接受某些参数的方法......我真的不明白为什么,如果这个方法做我认为它做的事情,它必须更复杂。这不只是获取完全相同的数据并以不同的方式格式化它的问题吗?我很困惑……

【问题讨论】:

    标签: ruby soap soap-client


    【解决方案1】:

    好吧,我最终做的是使用 SOAP:RPC:Drivers add_document_method,这需要我给它 wsdl、命名空间等,然后再给它属性作为单个输入哈希值(并给我以类似的格式输出)。它有效,只是不如 add_rpc_method 干净(这是 add_method 默认的)

    -珍妮

    【讨论】:

      猜你喜欢
      • 2022-07-07
      • 2022-10-01
      • 2018-07-08
      • 2022-01-24
      • 2020-03-10
      • 1970-01-01
      • 2023-01-10
      • 2014-01-28
      • 1970-01-01
      相关资源
      最近更新 更多