[ 
https://issues.apache.org/jira/browse/THRIFT-1990?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nick Daugherty closed THRIFT-1990.
----------------------------------

    Resolution: Invalid

Ah ha, turns out Ubuntu's thrift package is v 0.8, which is quite outdated and 
doesn't include exception support.
                
> 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

Reply via email to