]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 547852: Make the JSON-RPC interface return the correct error format to
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Sat, 27 Feb 2010 07:55:09 +0000 (23:55 -0800)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Sat, 27 Feb 2010 07:55:09 +0000 (23:55 -0800)
JSON-RPC 1.0 clients.
r=dkl, a=mkanat

Bugzilla/Error.pm
Bugzilla/WebService/Server/JSONRPC.pm

index 8e3710129771e0802d3d69649de3a02d192f6d1c..98e7d1d2fac92d26d4b53dbe599723e0f6bef44b 100644 (file)
@@ -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;
index 35eda1af1dba452275ed999a987b7df709110145..f929b28ac86b8bae74219241464491c3a0e9328f 100644 (file)
@@ -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