Class | ActionWebService::Client::XmlRpc |
In: |
vendor/rails/actionwebservice/lib/action_web_service/client/xmlrpc_client.rb
|
Parent: | Base |
Implements XML-RPC client support
class BloggerAPI < ActionWebService::API::Base inflect_names false api_method :getRecentPosts, :returns => [[Blog::Post]] end blog = ActionWebService::Client::XmlRpc.new(BloggerAPI, "http://.../RPC", :handler_name => "blogger") posts = blog.getRecentPosts
Creates a new web service client using the XML-RPC protocol.
api must be an ActionWebService::API::Base derivative, and endpoint_uri must point at the relevant URL to which protocol requests will be sent with HTTP POST.
Valid options:
# File vendor/rails/actionwebservice/lib/action_web_service/client/xmlrpc_client.rb, line 30 30: def initialize(api, endpoint_uri, options={}) 31: @api = api 32: @handler_name = options[:handler_name] 33: @protocol = ActionWebService::Protocol::XmlRpc::XmlRpcProtocol.new 34: @client = XMLRPC::Client.new2(endpoint_uri, options[:proxy], options[:timeout]) 35: end
# File vendor/rails/actionwebservice/lib/action_web_service/client/xmlrpc_client.rb, line 38 38: def perform_invocation(method_name, args) 39: method = @api.api_methods[method_name.to_sym] 40: if method.expects && method.expects.length != args.length 41: raise(ArgumentError, "#{method.public_name}: wrong number of arguments (#{args.length} for #{method.expects.length})") 42: end 43: args = method.cast_expects(args.dup) rescue args 44: if method.expects 45: method.expects.each_with_index{ |type, i| args[i] = @protocol.value_to_xmlrpc_wire_format(args[i], type) } 46: end 47: ok, return_value = @client.call2(public_name(method_name), *args) 48: return (method.cast_returns(return_value.dup) rescue return_value) if ok 49: raise(ClientError, "#{return_value.faultCode}: #{return_value.faultString}") 50: end