Поэтому мне нужно получить доступ к этому сервису из моего приложения rails. Я использую soap4r для чтения WSDL и динамического создания методов доступа к сервису.
Из того, что я прочитал, я должен иметь возможность связывать методы для доступа к вложенным узлам XML, но я не могу заставить его работать. Я попытался использовать команду wsdl2ruby и прочитал сгенерированный код. Насколько я могу судить, мыльная библиотека не генерирует эти методы доступа. Я новичок в рубине, поэтому не знаю, может я что-то упустил?
Я знаю, что когда я проверяю элемент, я вижу нужные мне данные. Я просто не могу добраться до него.
Например, если я использую следующий код:
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
Извините за длинный пост, я подумал, что чем больше информации, тем больше вероятность, что кто-то укажет мне правильное направление.
Спасибо
-луч