Bug 547852: Make the JSON-RPC interface return the correct error format to
JSON-RPC 1.0 clients. r=dkl, a=mkanat git-svn-id: svn://10.0.0.236/branches/BUGZILLA-3_6-BRANCH@259825 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
80542c3b91
commit
7d7eba7f4f
@ -1 +1 @@
|
||||
7002
|
||||
7003
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user