Jens Geyer created THRIFT-5947:
----------------------------------

             Summary: Exception has occurred: Error: writeString called without 
a string/Buffer argument: [object Object]
                 Key: THRIFT-5947
                 URL: https://issues.apache.org/jira/browse/THRIFT-5947
             Project: Thrift
          Issue Type: Bug
          Components: JavaScript - Compiler
            Reporter: Jens Geyer


There is a bug in the JavaScript custom exception constructor implementation.
This thrift custom exception :

{code}
exception CustomError {
  1: required ErrorCode code;
}
{code}

results to a constructor which takes a single JS Object with custom properties :

{code}
const CustomError = module.exports.CustomError = class extends 
Thrift.TException {
  constructor(args) {
    super(args);
    this.name = "CustomError";
    this.code = null;
    // ...
{code}

We can check it in the associated TypeScript typings :

{code}
declare class ZaapError extends Thrift.TException {
    public code: ErrorCode;

      constructor(args?: { code: ErrorCode; });
  }
{code}

The generated code gives the JS object to the constructor of Thrift.TException.
But the Thrift.TException constructor takes a single string argument :

{code}
exports.TException = TException;

function TException(message) {
  Error.call(this);
  Error.captureStackTrace(this, this.constructor);
  this.name = this.constructor.name;
  this.message = message;
};
util.inherits(TException, Error);
{code}

Giving this custom object to the TException (instead of a string) throws 
unwanted Thrift exceptions in TBinaryProtocol.prototype.writeStringOrBinary :

{code}
Exception has occurred: Error: writeString called without a string/Buffer 
argument: [object Object]
{code}




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to