diff options
author | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-02-27 08:53:50 +0100 |
---|---|---|
committer | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-02-27 08:53:50 +0100 |
commit | 4ac48f08be400b915e88ba25249a04a8a2747fd7 (patch) | |
tree | 69e3720a3cc17701eb4acaaa3d89d2d2aca1d885 | |
parent | 65255e8cff64819ee45cfcbcebb049abf4f1f756 (diff) | |
download | bugzilla-4ac48f08be400b915e88ba25249a04a8a2747fd7.tar.gz bugzilla-4ac48f08be400b915e88ba25249a04a8a2747fd7.tar.xz |
Bug 547852: Make the JSON-RPC interface return the correct error format to
JSON-RPC 1.0 clients.
r=dkl, a=mkanat
-rw-r--r-- | Bugzilla/Error.pm | 4 | ||||
-rw-r--r-- | Bugzilla/WebService/Server/JSONRPC.pm | 13 |
2 files changed, 13 insertions, 4 deletions
diff --git a/Bugzilla/Error.pm b/Bugzilla/Error.pm index 8e3710129..98e7d1d2f 100644 --- a/Bugzilla/Error.pm +++ b/Bugzilla/Error.pm @@ -124,7 +124,9 @@ sub _throw_error { # higher than 999, but we do this to avoid conflicts with # the internal JSON::RPC error codes. $server->raise_error(code => 100000 + $code, - message => $message); + message => $message, + id => $server->{_bz_request_id}, + version => $server->version); # We die with no message. JSON::RPC checks raise_error before # it checks $@, so it returns the proper error. die; diff --git a/Bugzilla/WebService/Server/JSONRPC.pm b/Bugzilla/WebService/Server/JSONRPC.pm index 35eda1af1..f929b28ac 100644 --- a/Bugzilla/WebService/Server/JSONRPC.pm +++ b/Bugzilla/WebService/Server/JSONRPC.pm @@ -35,8 +35,6 @@ sub new { Bugzilla->_json_server($self); $self->dispatch(WS_DISPATCH); $self->return_die_message(1); - # Default to JSON-RPC 1.0 - $self->version(0); return $self; } @@ -95,6 +93,15 @@ sub datetime_format { return $iso_datetime; } + +# Store the ID of the current call, because Bugzilla::Error will need it. +sub _handle { + my $self = shift; + my ($obj) = @_; + $self->{_bz_request_id} = $obj->{id}; + return $self->SUPER::_handle(@_); +} + # Make all error messages returned by JSON::RPC go into the 100000 # range, and bring down all our errors into the normal range. sub _error { @@ -116,7 +123,7 @@ sub _error { # We want to always send the JSON-RPC 1.1 error format, although # If we're not in JSON-RPC 1.1, we don't need the silly "name" parameter. - if (!$self->version) { + if (!$self->version or $self->version ne '1.1') { my $object = $self->json->decode($json); my $message = $object->{error}; # Just assure that future versions of JSON::RPC don't change the |