Hello everyone.
I want to write a simple webservice in rails, which will accept
requests by a javascript client using XML-RPC.
Knowing very little about webservices in general, I decided first to
set up a couple of simple applications (a server and a client) to
learn how webservices work.
Using rails 2.0, I first followed the instructions here:
http://manuals.rubyonrails.com/read/book/10
and then tweaked my apps to get them working in rails 2.0 as explained
here:
Now, please follow me and have a look if I’m doing something wrong,
'cause I cannot get a single thing working…
I set up a single method, which takes a string and returns an integer
(it does nothing - it’s just to see if it works):
(content of /app/apis/myws_api.rb)
class MywsAPI < ActionWebService::API::Base
inflect_names false
api_method :givenumber, :expects => [:parameter1=>:string], :returns
=> [:int]
end
(content of /app/controllers/myws_controller.rb)
class MywsController < ApplicationController
web_service_dispatching_mode :layered
web_service :myws, MywsService.new
end
(content of /app/models/myws_service.rb)
class MywsService < ActionWebService::Base
web_service_api MywsAPI
def givenumber(:parameter1)
return 1
end
end
And that should be all, right?
Now for the client… I just really wanted just to see something
coming out of the webservice in the quickiest and dirtiest way, so I
just scaffolded a Thing object. In its edit action, I just call the
web service and flash it out:
(excerpt from thing_controller.rb)
def edit
@myws_client = ActionWebService::Client::XmlRpc.new(MywsAPI,
‘http://localhost:3000/myws/api’, :handler_name => ‘myws’)
flash[:notice] = @myws_client.givenumber(‘test’)
redirect_to(things_path)
end
When I fire things up, something goes wrong. My client gets a most
discouraging:
“HTTP-Error: 500 Internal Server Error”
While mongrel says that there has been a:
“LoadError (Expected [my project path]/app/apis/myws_api.rb to define
MywsApi)”
Since MywsApi is defined in myws_api.rb, I do not really know what’s
happening here.
I know that the client ‘sees’ the server, because if I try to call the
service with the wrong parameters, example:
@myws_client.givenumber(‘test’, ‘test2’)
I get the error:
givenumber: wrong number of arguments (2 for 1)
So, where am I messing up?
Any help would be much appreciated - Thanks in advance!
Regards,
Rey9999