[
https://issues.apache.org/jira/browse/THRIFT-1990?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Henrique Mendonça updated THRIFT-1990:
--------------------------------------
Labels: node nodejs (was: )
> Node.js Exceptions Don't Work
> -----------------------------
>
> Key: THRIFT-1990
> URL: https://issues.apache.org/jira/browse/THRIFT-1990
> Project: Thrift
> Issue Type: Bug
> Components: Node.js - Library
> Affects Versions: 0.7, 0.9, 1.0
> Environment: Ubuntu 13.04, Node.js v0.8.14
> Reporter: Nick Daugherty
> Labels: node, nodejs
>
> Exception passing / handling doesn't seem to be working in the Node.js
> library. If the Thrift server throws an exception, the client code does not
> see an error, and instead is passed a return value. The expected behavior is
> a server Exception would be exposed as 'err', the first argument to the
> client callback.
> Have verified using my own code and the supplied example code by adding a
> simple Exception type to my .thrift file, regenerating, then stubbing out the
> server methods to always error.
> Have tried all transports, using the multitransport examples.
> For example, with the following exception definition:
> exception NotFoundException {
> 1: string message
> }
> and the following server method implementation:
> var store = function(user, result) {
> return result(new ttypes.NotFoundException({message:'failed!'}));
> };
> This client invocation will never receive an error in the callback, and will
> in fact be passed an empty instance of whatever the return value is supposed
> to be. For example, if a method returns a custom data type, the callback
> receives an instance of the custom data type with all members set to null.
> f_client.store(user1, function(err, response) {
> if (err) { console.error(err); return; } // This never actually happens,
> because err is always null!
> console.log("stored:", user1.uid, " as ", user1.name);
> b_client.retrieve(user1.uid, function(err, responseUser) {
> if (err) { console.error(err); return; }
> console.log("retrieved:", responseUser.uid, " as ", responseUser.name);
> });
> });
> I noticed that the Exception objects seem to be written to the wire correctly
> - in the generated js file, the Exception class's .write() method appears to
> fire correctly. However, the .read() never goes off, so it's getting lost
> somewhere in between.
> Shouldn't matter, but the client and server are both on the same machine.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira