[
https://issues.apache.org/jira/browse/THRIFT-5803?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17869229#comment-17869229
]
Team_RPCtester commented on THRIFT-5803:
----------------------------------------
We think Go and Python should also produce an error when the required field in
unset. Receiving an empty string may be confusing to users.
> Inconsistencies in Handling Default Values for Required Fields Across Thrift
> Implementations
> --------------------------------------------------------------------------------------------
>
> Key: THRIFT-5803
> URL: https://issues.apache.org/jira/browse/THRIFT-5803
> Project: Thrift
> Issue Type: Bug
> Affects Versions: 0.19.0, 0.20.0
> Reporter: Team_RPCtester
> Priority: Major
>
> Hi,
> We discover an inconsistent behavior with respect to default values for
> required string fields. Specifically, in Go, a required string field is
> automatically initialized to an empty string if not explicitly set, whereas
> other languages do not automatically initialize this field. This
> inconsistency can be illustrated with the following example:
> Thrift Definition:
> {code:java}
> namespace go commonResource
> struct StructClass_0 {
> 1: required string f_1,
> }
> service DataService {
> StructClass_0 Method_1(1: StructClass_0 agr_method_1)
> }
> {code}
> Go client side,
> {code:java}
> agr_method_1_0 := commonResource.NewStructClass_0()
> fmt.Println(agr_method_1_0)
> // method_1_re_agr_method_1_0: StructClass_0({F_1:})
> {code}
> python client side
> {code:java}
> agr_method_1 = StructClass_0()
> print(agr_method_1)
> # StructClass_0(f_1=None)
> {code}
> nodejs client side
> {code:java}
> arg_Method_1 = new ttypes.StructClass_0();
> console.log(arg_Method_1);
> // { f_1: null }
> {code}
> GO server side
> {code:java}
> func (d DataServiceHandler) Method_1(ctx context.Context, agr_method_1
> *commonResource.StructClass_0) (re_agr_method_1
> *commonResource.StructClass_0, _err error) {
> re_agr_method_1 = agr_method_1
> return re_agr_method_1, nil
> }
> {code}
> *Behavior Observed:*
> * On the Go client side, if agr_method_1_0 is sent with an uninitialized
> f_1, Go automatically sets f_1 to an empty string. The server receives this
> empty string and processes it accordingly.
> * On the Node.js client side, if arg_Method_1 is sent with an uninitialized
> f_1, Node.js client reports an error: "Required field f_1 is unset!" and does
> not allow the call to proceed.
> * On the Python client side, if agr_method_1 is sent with f_1 as null, the
> Go server reports: "*commonResource.StructClass_0 error reading struct:
> Required field F_1 is not, the Nodejs server will prompt “"Required field f_1
> is unset!"”, the Python server will return what it receives.
> Can you help check this issue.
> Thank you.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)