thrift-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rodolfo Ochoa <rodolfo.oc...@gmail.com>
Subject Re: Error with binary data with node.js
Date Fri, 19 Sep 2014 22:33:19 GMT
the problem is...
the problem is that for the generated code,
thrift maps binary data into strings, and uses the method readString from
the BinaryProtocol
protocol.js:280 TBinaryProtocol.prototype.readString = function() {
instead of using readBinary,
protocol.js:275 TBinaryProtocol.prototype.readBinary = function() {
which would return a buffer object.
readString method in the transport will use buffer(...).toString("utf8")
which will sanitize utf and will replace invalid unicode sequences with the
Unicode Replacement Character.

*my code:*
my binary field was mapped on ondb_types.js as:
TGetResult.prototype = {};
TGetResult.prototype.read = function(input) {
  input.readStructBegin();
  while (true)
  {
    var ret = input.readFieldBegin();
    var fname = ret.fname;
    var ftype = ret.ftype;
    var fid = ret.fid;
    if (ftype == Thrift.Type.STOP) {
      break;
    }
    switch (fid)
    {
      case 1:
      if (ftype == Thrift.Type.STRUCT) {
        this.currentRow = new ttypes.TRow();
        this.currentRow.read(input);
      } else {
        input.skip(ftype);
      }
      break;
      case 2:
*      if (ftype == Thrift.Type.STRING) {*
*        this.currentRowVersion = input.readString();*
      } else {
        input.skip(ftype);
      }
      break;
      default:
        input.skip(ftype);
    }
    input.readFieldEnd();
  }
  input.readStructEnd();
  return;
};


and TGetResult is defined in ondb.thrift file as:
typedef binary TVersion
struct TGetResult
{
    1:TRow currentRow;
    2:TVersion currentRowVersion;
}

I'm not sure if this is already been reported or if this is already been
fixed on the newest version.

-Rod.O






On Thu, Sep 18, 2014 at 11:23 PM, Randy Abernethy <randy.abernethy@gmail.com
> wrote:

> Hey Rodolfo,
>
> While I can not say for sure not having seen your code, I would be highly
> suspect of any Thift node lib prior to 0.9.2, which is not yet released.
> Try the current master, it has too many fixes to mention and will likely
> solve your problem. You don't need to change versions on any of the other
> languages. Ping back if you still have trouble.
>
> Best,
> Randy
>
> On Thursday, September 18, 2014, Rodolfo Ochoa <rodolfo.ochoa@gmail.com>
> wrote:
>
> > on node:
> > thrift@0.9.1
> >
> > on java:
> > libthrift-0.9.1.jar
> >
> >
> >
> > On Thu, Sep 18, 2014 at 9:09 PM, Randy Abernethy <
> > randy.abernethy@gmail.com <javascript:;>>
> > wrote:
> >
> > > What version of thrift are you using?
> > > On Sep 18, 2014 7:46 PM, "Rodolfo Ochoa" <rodolfo.ochoa@gmail.com
> > <javascript:;>> wrote:
> > >
> > > > I have a Java server sending info to C/Python/node.js clients,
> > > > I don't have issues with C or Python, only with node.js
> > > > on Java side, I'm sending a byte array, and if I print the values of
> > this
> > > > byte array I got:
> > > > byte codes:  -84 -19 0 5 119 44 0 5 -50 108 0 44 75 73 78 -120 -103
> -59
> > > > -124 3 -92 -121 -98 -104 0 0 0 0 0 0 37 -128 1 3 0 0 0 1 0 0 0 1 0 0
> 0
> > 0
> > > 0
> > > > -78 68 -89
> > > >
> > > > but on node.js side I receive:
> > > > byte codes:  65533 65533 0 5 119 44 0 5 65533 108 0 44 75 73 78 65533
> > > 65533
> > > > 324 3 65533 65533 65533 65533 0 0 0 0 0 0 37 65533 1 3 0 0 0 1 0 0 0
> 1
> > 0
> > > 0
> > > > 0 0 0 65533 68 65533
> > > >
> > > > this means that some characters were replaced, why? how?
> > > > how can avoid this behavior?
> > > >
> > > >
> > > >
> > > > --
> > > > *Rod.O*
> > > >
> > >
> >
> >
> >
> > --
> > *Rod.O*
> >
>



-- 
*Rod.O*

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message