Ticket #6765 (closed enhancement: fixed)

Opened 7 months ago

Last modified 4 months ago

JSON Procedure Call: error handling

Reported by: guest Owned by: dmachi
Priority: normal Milestone: 1.2
Component: RPC Version: 1.1.0
Severity: normal Keywords: RPC, JSON, error, exception
Cc: alex

Description

Error object contains only HTTP error. Example:

       var myObject = new dojo.rpc.JsonService("/definition.smd");
       var myDeferred = myObject.add(121,5});
       myDeferred.addCallback(myCallbackMethod);
       myDeferred.addErrback(myErrorbackMethod);

Exception thrown deliberately in PHP file (token is not defined).

if (
Sessions::get()->getToken()
!== Request::get()->getRpcParams('token')
) :
throw new Exception('RPC Server: Invalid token', 3006);
endif;

Result:

  message : Unable to load /rpcServer.php status:400
  fileName : https://www.somewebsite.org/js/dojo/_base/_loader/bootstrap.js
  lineNumber : 475
  stack : Error("Unable to load /rpcServer.php status:400")@:0
([object Error])@https://www.somewebsite.org/js/dojo/_base/_loader/bootstrap.js:475
()@https://www.somewebsite.org/js/dojo/_base/_loader/bootstrap.js:762
([object Error])@https://www.somewebsite.org/js/dojo/_base/_loader/bootstrap.js:678
([object Error])@https://www.somewebsite.org/js/dojo/_base/_loader/bootstrap.js:710
([object Object])@https://www.somewebsite.org/js/dojo/_base/_loader/bootstrap.js:975
(-3)@https://www.somewebsite.org/js/dojo/_base/_loader/bootstrap.js:889

  name : Error

Expected: Have access to exception data including optional field data as specified in JSON-RPC over HTTP.

 responseText : {"result":null,"error":{"code":-32600,"message":"Invailid request.","data":"RPC Server: Invalid token"},"id":null}

Resolution: In RpcService?.js on line 83 entire object data should be passed and not only property message congaing only HTTP message. Current code:

deferredRequestHandler.errback(new Error(data.message));

Suggested change:

deferredRequestHandler.errback(new Error(data));

In this manner developer would have chance to fine tune error handling.

Change History

Changed 7 months ago by guest

Actually since in every case data is already error object line new error object should not be created. Line 86 should read:

			deferredRequestHandler.errback(data);

Changed 5 months ago by bill

  • milestone set to tbd

mark all (open) tickets w/blank milestones to be "tbd"; their milestones need to be set to a version number or to "future"

Changed 4 months ago by kzyp

  • status changed from new to closed
  • resolution set to fixed

(In [14792]) fixes #6765

Changed 4 months ago by dylan

  • milestone changed from tbd to 1.2
Note: See TracTickets for help on using tickets.