Nie mogę dojść do ładu z SOAP4R,zdalne funkcje nie działają

Witam

Proszę Was o pomoc bo próbuję coś zrobić przy pomocy soap4r wydaje mi się że jest to jedyna biblioteka która umożliwia tworzenie klientów SOAP dla Ruby.Używam obecnie środowiska 3rd rail który jest chyba najlepszy ze znanych mi (ze względu na podpowiedzi). Mam zainstalowany soap4r 1.8.5.Próbowałem różnych przykładów z sieci, żaden nie działa!

Wpisałem na przykład coś takiego:

[code]#Require The Library
require ‘soap/rpc/driver’

#Connections
endpoint = ‘http://xurrency.com/servidor_soap.php?wsdl
proxy = SOAP::RPC::Driver.new(endpoint)

#Add Method
proxy.add_method(‘getValue’, ‘amount’, ‘base’, ‘target’)

#Call API Method and Get Exchange Rate
rate = proxy.getValue(‘1’,‘usd’,‘eur’)
puts ‘Rate: #{rate}’[/code]
Kiedy wpisuję rate=proxy.(tutaj pokazuje się lista) w spisie nie ma funkcji “getValue” wogóle jakby nie istniała.Przykład wg autora działa u mnie wywołuje długą listę błędów.

Inny przykład:

[code]#Requires Ruby version 1.8.5 or highet
require ‘soap/wsdlDriver’
require ‘pp’
wsdl = ‘http://webservices.daehosting.com/services/isbnservice.wso?WSDL
driver = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver

Log SOAP request and response

driver.wiredump_file_base = “soap-log.txt”

response = driver.IsValidISBN13(:sISBN => ‘1111111111111’)
#pp(response)
puts response.isValidISBN13Result[/code]
Chyba działa, dostaję odpowiedź “false”,ale podpowiedzi po kropce właściwej też nie ma.Może ja coś źle wpisuję?

Inny przykład:

[code]login=‘hhhhhh’
password=‘uuuuuuu’
cc=1
key=‘iiiiiiii’

require ‘soap/wsdlDriver’
wsdl_url=‘http://webapi.allegro.pl/uploader.php?wsdl
proxy=SOAP::WSDLDriverFactory.new(wsdl_url).create_rpc_driver
wer=proxy.doQuerySysStatus(1,1,key)
t=proxy.doLogin(login,password,cc,key,wer)
puts t[/code]
Nie ma podpowiedzi tradycyjnie no i nic nie działa.Podaję listę błędów:

[color=red]
C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:487:in instance_variable_set':@country-id’ is not allowed as an instance variable name (NameError)
from C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:487:in create_request_obj' from C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:393:inrequest_rpc_enc’
from C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:376:in request_rpc' from C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:338:inrequest_body’
from C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:123:in call' from C:/TurboRDK/lib/ruby/1.8/soap/rpc/driver.rb:178:incall’
from C:/TurboRDK/lib/ruby/1.8/soap/rpc/driver.rb:232:in `doQuerySysStatus’
from C:/Users/hubert/3rdRail/workspace/r1/rs1.rb:9
[/color]

Co robić żeby to działało ? Szczególnie zależy mi na tym ostatnim przykładzie. Proszę o jakieś wskazówki.Pozdrawiam.hop.

http://rubyonrails.pl/forum/p8751-2009-03-10-15:10:12

zamiast @country-id daj @country_id

irb(main):003:0> @country-id NoMethodError: undefined method `-' for nil:NilClass from (irb):3 irb(main):004:0> @country_id => nil

'Dzięki seban za wiadomość ale ja nie wpisuję tego “@country-id” to jest poza moim programmem.

Dzięki no i co seban mam ten twój kod wrzucić do konsoli i uruchomić program?

Dalej mam jakieś błędy:

[color=red]
C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:487:in instance_variable_set':@country-id’ is not allowed as an instance variable name (NameError)
from C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:487:in create_request_obj' from C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:393:inrequest_rpc_enc’
from C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:376:in request_rpc' from C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:338:inrequest_body’
from C:/TurboRDK/lib/ruby/1.8/soap/rpc/proxy.rb:123:in call' from C:/TurboRDK/lib/ruby/1.8/soap/rpc/driver.rb:178:incall’
from C:/TurboRDK/lib/ruby/1.8/soap/rpc/driver.rb:232:in `doQuerySysStatus’
from C:/Users/hubert/3rdRail/workspace/r1/rs1.rb:9
[/color]

Jak zmienić tą nazwę?

piachoo linkował do odpowiedzi

Witam

Zrobiłem tak jak napisał ten Ghandal z linku który podał piachoo (prawie tak samo bo gdy napisałem tak samo wywalał wciąż to samo co poprzednio,ja napisałem:

gem 'soap4r'

zamiast po require to przed require, o tak to wygląda:

[code]login=‘hhhhhh’
password=‘uuuuuuu’
cc=1
key=‘iiiiiiii’

gem ‘soap4r’
require ‘soap/wsdlDriver’
wsdl_url=‘http://webapi.allegro.pl/uploader.php?wsdl
proxy=SOAP::WSDLDriverFactory.new(wsdl_url).create_rpc_driver
wer=proxy.doQuerySysStatus(1,1,key)
t=proxy.doLogin(login,password,cc,key,wer)
puts t[/code]
I teraz mam inne błędy:

[color=red]
C:/TurboRDK/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/xsd/datatypes.rb:1211:in Integer': can't convert Array into Integer (TypeError) from C:/TurboRDK/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/xsd/datatypes.rb:1211:inscreen_data_str’
from C:/TurboRDK/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/xsd/datatypes.rb:261:in screen_data' from C:/TurboRDK/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/xsd/datatypes.rb:141:inset’
from C:/TurboRDK/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/xsd/datatypes.rb:158:in init' from C:/TurboRDK/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/xsd/datatypes.rb:1289:ininitialize’
from C:/TurboRDK/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/baseData.rb:53:in initialize' from C:/TurboRDK/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/baseData.rb:93:ininitialize’
from C:/TurboRDK/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/mapping/registry.rb:267:in new' ... 14 levels... from C:/TurboRDK/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/rpc/proxy.rb:127:incall’
from C:/TurboRDK/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/rpc/driver.rb:181:in call' from (eval):6:indoLogin’
from C:/Users/hubert/3rdRail/workspace/r1/rs1.rb:11
[/color]

Wiem już że najważniejszy jest ten pierwszy błąd, pozostałe wynikają z niego,ale za Japonię nie mogę go zrozumieć. A może błąd jest zupełnie gzie indziej ? Pozdrawiam. hop.

PS. Mam najnowszego gema jaki jest dostępny v 1.5.8.

no jak byk pisze ze nie mozesz tablicy na liczbe skonwertowac, jesli o pierwszy blad chodzi