Implements XML-RPC client support

Example Usage

  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
Methods
Public Class methods
new(api, endpoint_uri, options={})

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:

:handler_name
If the remote server defines its services inside special handler (the Blogger API uses a "blogger" handler name for example), provide it here, or your method calls will fail
    # 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
Protected Instance methods
perform_invocation(method_name, args)
    # 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
public_name(method_name)
    # File vendor/rails/actionwebservice/lib/action_web_service/client/xmlrpc_client.rb, line 52
52:         def public_name(method_name)
53:           public_name = @api.public_api_method_name(method_name)
54:           @handler_name ? "#{@handler_name}.#{public_name}" : public_name
55:         end