Generated javascript ignores the "optional" keyword
---------------------------------------------------
Key: THRIFT-1546
URL: https://issues.apache.org/jira/browse/THRIFT-1546
Project: Thrift
Issue Type: Improvement
Components: JavaScript - Compiler
Affects Versions: 0.8
Reporter: Larregoity
Priority: Minor
The "optional" keyword is ignored in the generated javascript.
Given a thrift structure like :
>>
struct Contract {
1: SummaryContract summary,
3: string guarantees,
4: string options,
5: optional VehicleContract vehicle,
6: optional ResidenceContract residence,
7: optional HealthContract health,
}
>>
The thrift with JSONProtocol sent by the java server looks like :
>>
.."3":{"str":"VEHICLE CONTRACT 1"}}},"3":{"str":"YAMAHA
GUARANTEES"},"4":{"str":"YAMAHA
OPTIONS"},.."5":{"rec":{"1":{"i32":2},"2":{"str":"Yamaha"},"3":{"str":"F6"},"4":{"str":"ARG-10-MESSI"}}..
>>
the ResidenceContract and HealthContract are structures are not sent by the
java server.
But when this thrift stream is read by the javascript, the result is a json
structure like :
>>
..,"description":"VEHICLE CONTRACT 1"},"guarantees":"YAMAHA
GUARANTEES","options":"YAMAHA
OPTIONS","vehicle":{"type":2,"brand":"Yamaha","model":"F6","inmatriculation":"ARG-10-MESSI"},"residence":{"type":0,"building":0,"rooms":0},"health":{"type":0}}..
>>
The ResidenceContract and HealthContract JSON objects are present but empty.
This is because the generated javascript is like:
>>
Contract = function(args){
this.summary = new SummaryContract()
this.guarantees = ''
this.options = ''
this.vehicle = new VehicleContract()
this.residence = new ResidenceContract()
this.health = new HealthContract()
>>
we see that the members are created by default in the constructor, even if they
are "optional".
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira