Клиент SOAP Web-сервиса Rails - PullRequest
0 голосов
/ 10 марта 2009

Я получаю сообщение об ошибке при попытке получить доступ к веб-службе через мыло

soap_client = SOAP::WSDLDriverFactory.new("http://api.upsidewireless.com/soap/Authentication.asmx?WSDL")
driver = soap_client.createDriver
@p = driver.GetParameters(:username => 'uname', :password => 'pword') #ERROR => wrong number of arguments (1 for 2)

Я ясно вижу два аргумента для вызова этого метода. Почему я получаю эту ошибку?

Ответы [ 2 ]

4 голосов
/ 10 марта 2009

@ james имеет правильный ответ, но только для справки в будущем (и потому что это укусило меня раньше), этот вызов:

driver.GetParameters(:username => 'uname', :password => 'pword') 

передает один параметр: хеш. Каждый из ваших элементов не одно; это хеш-элемент с ключом и значением. Руби замечает это и помещает их в один хеш. Таким образом, вы фактически передаете это:

driver.GetParameters({:username => 'uname', :password => 'pword'}) 

Это одна из запутанных вещей при вызове метода в Ruby. Если вы передаете хеш в качестве последнего (или единственного) параметра, вы можете пропустить {}, и большинство людей это делает. Трудно разобраться иногда.

Если вы действительно хотите передать это как два параметра:

driver.GetParameters('uname', 'pword') 
2 голосов
/ 10 марта 2009

WSDLDriver устарел (вызывается из createDriver). Вы должны использовать 'create_rpc_driver'. Я получаю ответ с этим методом из вашего примера. Есть ли какая-то причина не использовать 'create_rpc_driver'?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...