[ https://issues.apache.org/jira/browse/THRIFT-1474?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13245684#comment-13245684 ]
Bryan Duxbury commented on THRIFT-1474: --------------------------------------- Arvind - I would be a lot more eager to apply this patch if it had some unit tests in it. Also, it looks like you only fixed the standard scheme. Any reason not to apply the same fix to the Tuple scheme? > Not throw user defined exception when a defined method returns boolean result > ----------------------------------------------------------------------------- > > Key: THRIFT-1474 > URL: https://issues.apache.org/jira/browse/THRIFT-1474 > Project: Thrift > Issue Type: Bug > Components: Java - Compiler > Affects Versions: 0.8 > Reporter: Koji Hisano > Assignee: Bryan Duxbury > Attachments: codegen.diff, primitive_result_fix.patch > > > A boolean result method always returns result value and exception value when > a user defined exception is thrown. > So, client handles the result as having a result value and ignore the > exception. > {code:title=Sample thrift definition|borderStyle=solid} > bool createAccount(1:string userName, 2:string password, 3:string > mailAddress) throws (1: Exception.ServiceException serviceException); > {code} > {code:title=Current generated code in createAccount_resultStandardScheme > class|borderStyle=solid} > public void write(org.apache.thrift.protocol.TProtocol oprot, > createAccount_result struct) throws org.apache.thrift.TException { > struct.validate(); > oprot.writeStructBegin(STRUCT_DESC); > oprot.writeFieldBegin(SUCCESS_FIELD_DESC); // <- Problem because the > value existence is not checked > oprot.writeBool(struct.success); > oprot.writeFieldEnd(); > if (struct.serviceException != null) { // <- I think it is better to > use #isSetServiceException > oprot.writeFieldBegin(SERVICE_EXCEPTION_FIELD_DESC); > struct.serviceException.write(oprot); > oprot.writeFieldEnd(); > } > oprot.writeFieldStop(); > oprot.writeStructEnd(); > } > {code} > {code:title=Correct generated code (Maybe)|borderStyle=solid} > public void write(org.apache.thrift.protocol.TProtocol oprot, > createAccount_result struct) throws org.apache.thrift.TException { > struct.validate(); > oprot.writeStructBegin(STRUCT_DESC); > if (struct.isSetSuccess()) { > oprot.writeFieldBegin(SUCCESS_FIELD_DESC); > oprot.writeBool(struct.success); > oprot.writeFieldEnd(); > } > if (struct.isSetServiceException()) { > oprot.writeFieldBegin(SERVICE_EXCEPTION_FIELD_DESC); > struct.serviceException.write(oprot); > oprot.writeFieldEnd(); > } > oprot.writeFieldStop(); > oprot.writeStructEnd(); > } > {code} -- 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