[
https://issues.apache.org/jira/browse/THRIFT-735?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12845690#action_12845690
]
Bryan Duxbury commented on THRIFT-735:
--------------------------------------
If Bar was a struct, then yes, this behavior would be exactly right. That's
because a struct is a collection of fields, all or some of which may be unset.
However, if it was a struct, and a required field was unset, it would be
invalid when deserialized under the current behavior.
On the flip side, we've defined a union as a struct where exactly one field
*must* be set at all times. If we didn't enforce this, then we'd essentially be
introducing a null type to Thrift, which is something I think we actually want
to discourage pretty actively. The fact that a union and a struct are
implemented the same on the wire is only an artifact of our desire to extend
union support to other languages in a backwards-compatible fashion.
> Required field checking is broken when the field type is a Union struct
> -----------------------------------------------------------------------
>
> Key: THRIFT-735
> URL: https://issues.apache.org/jira/browse/THRIFT-735
> Project: Thrift
> Issue Type: Bug
> Components: Compiler (Java), Library (Java)
> Affects Versions: 0.2
> Reporter: Bryan Duxbury
> Assignee: Bryan Duxbury
> Fix For: 0.3
>
> Attachments: thrift-735.patch
>
>
> The validate() method on generated structs verifies that required fields are
> set after validation. However, if the type of the field is a Union struct,
> then just checking that the field isn't null is not a valid check. The value
> may be a non-null union, but have an unset field. (We encountered this when
> deserializing a type that had a union for a field, and the union's set value
> was an enum value that had been removed from the definition, making it a
> skip.)
> In order to perform the correct validation, if the value is a Union, then we
> must also check that the set field and value are non-null.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.