[ 
https://issues.apache.org/jira/browse/THRIFT-1474?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13265049#comment-13265049
 ] 

Arvind Jayaprakash commented on THRIFT-1474:
--------------------------------------------

Bryan, I wouldn't mind expect that the existing set of tests seem to break on 
the existing code. Having the isolate broken tests, add new ones that are 
supposed to work etc. etc. isn't a very joyful activity. FWIW, the default java 
lib as it exists on branch 0.8.x doesn't seem to be running the test cases as 
part of the default target.
                
> 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

        

Reply via email to