aboutsummaryrefslogtreecommitdiffstats
path: root/actionwebservice
diff options
context:
space:
mode:
authorLeon Breedt <bitserf@gmail.com>2005-08-16 05:54:12 +0000
committerLeon Breedt <bitserf@gmail.com>2005-08-16 05:54:12 +0000
commitfbba128f73e9a297ca6252c85d3c42b34241ff2f (patch)
treef102d7dede0c9f8321d864c4448effae7b639dea /actionwebservice
parent9d79880e81a035c96ca70d7e342549236ed1f242 (diff)
downloadrails-fbba128f73e9a297ca6252c85d3c42b34241ff2f.tar.gz
rails-fbba128f73e9a297ca6252c85d3c42b34241ff2f.tar.bz2
rails-fbba128f73e9a297ca6252c85d3c42b34241ff2f.zip
special-case non-existent target method handling for 'system.multicall' calls when the
method does not exist, to conform to the RFC and return the error inline in the multicall response. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2023 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionwebservice')
-rw-r--r--actionwebservice/lib/action_web_service/dispatcher/abstract.rb10
-rw-r--r--actionwebservice/test/dispatcher_action_controller_xmlrpc_test.rb8
2 files changed, 15 insertions, 3 deletions
diff --git a/actionwebservice/lib/action_web_service/dispatcher/abstract.rb b/actionwebservice/lib/action_web_service/dispatcher/abstract.rb
index 7e43892b24..cf3af538ab 100644
--- a/actionwebservice/lib/action_web_service/dispatcher/abstract.rb
+++ b/actionwebservice/lib/action_web_service/dispatcher/abstract.rb
@@ -62,6 +62,10 @@ module ActionWebService # :nodoc:
def xmlrpc_multicall_invoke(invocations)
responses = []
invocations.each do |invocation|
+ if invocation.is_a?(Hash)
+ responses << invocation
+ next
+ end
begin
case web_service_dispatching_mode
when :direct
@@ -120,7 +124,11 @@ module ActionWebService # :nodoc:
multicall_request = request.dup
multicall_request.method_name = method_name
multicall_request.method_params = params
- web_service_invocation(multicall_request, level + 1)
+ begin
+ web_service_invocation(multicall_request, level + 1)
+ rescue Exception => e
+ {'faultCode' => 4, 'faultMessage' => e.message}
+ end
end
end
end
diff --git a/actionwebservice/test/dispatcher_action_controller_xmlrpc_test.rb b/actionwebservice/test/dispatcher_action_controller_xmlrpc_test.rb
index 8309b0e16d..95c9333954 100644
--- a/actionwebservice/test/dispatcher_action_controller_xmlrpc_test.rb
+++ b/actionwebservice/test/dispatcher_action_controller_xmlrpc_test.rb
@@ -26,7 +26,9 @@ class TC_DispatcherActionControllerXmlRpc < Test::Unit::TestCase
{'methodName' => 'mt.bool'},
{'methodName' => 'blogger.str', 'params' => ['2000']},
{'methodName' => 'mt.alwaysFail'},
- {'methodName' => 'blogger.alwaysFail'}
+ {'methodName' => 'blogger.alwaysFail'},
+ {'methodName' => 'mt.blah'},
+ {'methodName' => 'blah.blah'}
])
assert_equal [
[["mtCat1", "mtCat2"]],
@@ -34,7 +36,9 @@ class TC_DispatcherActionControllerXmlRpc < Test::Unit::TestCase
[true],
["2500"],
{"faultCode" => 3, "faultString" => "MT AlwaysFail"},
- {"faultCode" => 3, "faultString" => "Blogger AlwaysFail"}
+ {"faultCode" => 3, "faultString" => "Blogger AlwaysFail"},
+ {"faultCode" => 4, "faultMessage" => "no such method 'blah' on API DispatcherTest::MTAPI"},
+ {"faultCode" => 4, "faultMessage" => "no such web service 'blah'"}
], response
end