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: http://www.texperts.com/2007/12/21/using-action-web-service-with-rails-20/ 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 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On May 22, 9:18 am, Rey9999 <reyfourn...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> (content of /app/models/myws_service.rb) > class MywsService < ActionWebService::Base > web_service_api MywsAPI > > def givenumber(:parameter1) > return 1 > end > > endThat is syntactically incorrect. It should be def givenumber(parameter1). In addition for magic autoload to work, you need to follow the rails naming conventions, so MywsAPI should be MywsApi (see the error message ?) Fred --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks for the quick reply! But now I get another strange error: HTTP-Error: 422 ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken) /vendor/rails/actionpack/lib/action_controller/ request_forgery_protection.rb :79:in `verify_authenticity_token'' ...and so on... Do I need to configure something to let the webservice run? Thanks Rey9999 On 22 Mag, 10:29, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On May 22, 9:18 am, Rey9999 <reyfourn...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > (content of /app/models/myws_service.rb) > > class MywsService < ActionWebService::Base > > web_service_api MywsAPI > > > def givenumber(:parameter1) > > return 1 > > end > > > end > > That is syntactically incorrect. It should be def > givenumber(parameter1). In addition for magic autoload to work, you > need to follow the rails naming conventions, so MywsAPI should be > MywsApi (see the error message ?) > > Fred--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Ok, problem solved - I needed to set the options for #protect_from_forgery. Thanks Fred, now it works like a charm! Regards, Rey9999 On 22 Mag, 10:47, Rey9999 <reyfourn...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Thanks for the quick reply! > > But now I get another strange error: > HTTP-Error: 422 > ActionController::InvalidAuthenticityToken > (ActionController::InvalidAuthenticityToken) > /vendor/rails/actionpack/lib/action_controller/ > request_forgery_protection.rb > :79:in `verify_authenticity_token'' > ...and so on... > > Do I need to configure something to let the webservice run? > > Thanks > > Rey9999 > > On 22 Mag, 10:29, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > On May 22, 9:18 am, Rey9999 <reyfourn...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > (content of /app/models/myws_service.rb) > > > class MywsService < ActionWebService::Base > > > web_service_api MywsAPI > > > > def givenumber(:parameter1) > > > return 1 > > > end > > > > end > > > That is syntactically incorrect. It should be def > > givenumber(parameter1). In addition for magic autoload to work, you > > need to follow the rails naming conventions, so MywsAPI should be > > MywsApi (see the error message ?) > > > Fred--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---