Commit 4ac48f08 authored by Max Kanat-Alexander's avatar Max Kanat-Alexander

Bug 547852: Make the JSON-RPC interface return the correct error format to

JSON-RPC 1.0 clients. r=dkl, a=mkanat
parent 65255e8c
...@@ -124,7 +124,9 @@ sub _throw_error { ...@@ -124,7 +124,9 @@ sub _throw_error {
# higher than 999, but we do this to avoid conflicts with # higher than 999, but we do this to avoid conflicts with
# the internal JSON::RPC error codes. # the internal JSON::RPC error codes.
$server->raise_error(code => 100000 + $code, $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 # We die with no message. JSON::RPC checks raise_error before
# it checks $@, so it returns the proper error. # it checks $@, so it returns the proper error.
die; die;
......
...@@ -35,8 +35,6 @@ sub new { ...@@ -35,8 +35,6 @@ sub new {
Bugzilla->_json_server($self); Bugzilla->_json_server($self);
$self->dispatch(WS_DISPATCH); $self->dispatch(WS_DISPATCH);
$self->return_die_message(1); $self->return_die_message(1);
# Default to JSON-RPC 1.0
$self->version(0);
return $self; return $self;
} }
...@@ -95,6 +93,15 @@ sub datetime_format { ...@@ -95,6 +93,15 @@ sub datetime_format {
return $iso_datetime; 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 # Make all error messages returned by JSON::RPC go into the 100000
# range, and bring down all our errors into the normal range. # range, and bring down all our errors into the normal range.
sub _error { sub _error {
...@@ -116,7 +123,7 @@ sub _error { ...@@ -116,7 +123,7 @@ sub _error {
# We want to always send the JSON-RPC 1.1 error format, although # 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 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 $object = $self->json->decode($json);
my $message = $object->{error}; my $message = $object->{error};
# Just assure that future versions of JSON::RPC don't change the # Just assure that future versions of JSON::RPC don't change the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment