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

Vitali Lovich updated THRIFT-2055:
----------------------------------

    Description: 
A non-optional field will be serialized even if not set if it is a 
number/boolean whereas not for objects.  For example, round-tripping:

{code}
struct Foo {
   int x;
   string y;
}
{code}

Using JSON notation for convenience
Input: \{ "x": 5 \}
In-memory object: isSetX() returns true, isSetY() returns false
Output: \{ "x": 5 \}

Input: \{ "y": "foo" \}
In-memory object: isSetX() returns false, isSetY() returns true
Output: \{ "x": 0, "y": "foo" \}

It should be consistent.  My gut is that the latter case is wrong and unset 
primitives should be omitted from serialization even if not optional.  My guess 
is that fields marked with required should always output them regardless of 
isSet, but not sure.

  was:
A non-optional field will be serialized even if not set if it is a 
number/boolean whereas not for objects.  For example, round-tripping:

{code}
struct Foo {
   int x;
   string y;
}
{code}

Using JSON notation for convenience
Input: { "x": 5 }
In-memory object: isSetX() returns true, isSetY() returns false
Output: { "x": 5 }

Input: { "y": "foo" }
In-memory object: isSetX() returns false, isSetY() returns true
Output: { "x": 0, "y": "foo" }

It should be consistent.  My gut is that the latter case is wrong and unset 
primitives should be omitted from serialization even if not optional.  My guess 
is that fields marked with required should always output them regardless of 
isSet, but not sure.

    
> Inconsistent serialization of unset variables between primitives & objects
> --------------------------------------------------------------------------
>
>                 Key: THRIFT-2055
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2055
>             Project: Thrift
>          Issue Type: Bug
>          Components: Java - Compiler
>    Affects Versions: 0.9
>            Reporter: Vitali Lovich
>
> A non-optional field will be serialized even if not set if it is a 
> number/boolean whereas not for objects.  For example, round-tripping:
> {code}
> struct Foo {
>    int x;
>    string y;
> }
> {code}
> Using JSON notation for convenience
> Input: \{ "x": 5 \}
> In-memory object: isSetX() returns true, isSetY() returns false
> Output: \{ "x": 5 \}
> Input: \{ "y": "foo" \}
> In-memory object: isSetX() returns false, isSetY() returns true
> Output: \{ "x": 0, "y": "foo" \}
> It should be consistent.  My gut is that the latter case is wrong and unset 
> primitives should be omitted from serialization even if not optional.  My 
> guess is that fields marked with required should always output them 
> regardless of isSet, but not sure.

--
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