所以我需要从我的 rails 应用程序访问这个服务。我正在使用soap4r 来读取WSDL 并动态生成访问服务的方法。
根据我的阅读,我应该能够链接方法来访问嵌套的 XML 节点,但我无法让它工作。我尝试使用 wsdl2ruby 命令并通读生成的代码。据我所知,soap 库没有生成这些访问器方法。我对红宝石很陌生,所以我不知道我是否只是错过了什么?
我知道当我检查元素时,我可以看到我想要的数据。我就是搞不定。
例如,如果我使用以下代码:
require "soap/wsdlDriver"
wsdl = "http://frontdoor.ctn5.org/CablecastWS/CablecastWS.asmx?WSDL"
driver = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver
response = driver.getChannels('nill')
puts response.inspect
我得到以下输出:
ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}binding
ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}operation
ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}body
ignored element: {http://schemas.xmlsoap.org/wsdl/soap12/}address
#<SOAP::Mapping::Object:0x80b96394 {http://www.trms.com/CablecastWS/}GetChannelsResult=#<SOAP::Mapping::Object:0x80b96178 {http://www.trms.com/CablecastWS/}Channel=[#<SOAP::Mapping::Object:0x80b95f5c {http://www.trms.com/CablecastWS/}ChannelID="1" {http://www.trms.com/CablecastWS/}Name="CTN 5">, #<SOAP::Mapping::Object:0x80b9519c {http://www.trms.com/CablecastWS/}ChannelID="2" {http://www.trms.com/CablecastWS/}Name="PPAC 2">, #<SOAP::Mapping::Object:0x80b94620 {http://www.trms.com/CablecastWS/}ChannelID="14" {http://www.trms.com/CablecastWS/}Name="Test Channel">]>>
所以数据肯定是有的!
这是 wsdl2ruby 为上面使用的方法生成的代码:
# {http://www.trms.com/CablecastWS/}GetChannels
class GetChannels
def initialize
end
end
# {http://www.trms.com/CablecastWS/}GetChannelsResponse
# getChannelsResult - ArrayOfChannel
class GetChannelsResponse
attr_accessor :getChannelsResult
def initialize(getChannelsResult = nil)
@getChannelsResult = getChannelsResult
end
end
很抱歉,这篇文章很长,我认为信息越多,有人就越有可能为我指明正确的方向。
谢谢
-射线