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

deepankar updated THRIFT-2988:
------------------------------
    Description: 
When using a generated Async Processor for any service, there is a class cast 
exception that can happen when you call the onError function on a returned 
AsyncMethodCallback (returned from any class that extends 
{{AsyncProcessFunction}}) with an exception other than the expected exception 
for that method

This occurs because the org.apache.thrift.TApplicationException being cast as 
(org.apache.thrift.TBase) in the generated code for a service 

{code:title=Bar.java|borderStyle=solid}

    indent(f_service_) << "{" << endl;
    indent_up();
    indent(f_service_) << "msgType = 
org.apache.thrift.protocol.TMessageType.EXCEPTION;" << endl;
    indent(f_service_) << "msg = (org.apache.thrift.TBase)new "
                          
"org.apache.thrift.TApplicationException(org.apache.thrift."
                          "TApplicationException.INTERNAL_ERROR, 
e.getMessage());" << endl;
    indent_down();
    indent(f_service_) << "}" << endl;
{code}
link : [code-in-github-trunk 
|https://github.com/apache/thrift/blob/master/compiler/cpp/src/generate/t_java_generator.cc#L3209-L3221]

There are two ways to solve this :
* one is make TApplicationException to extend TBase
* another is to change the code generation logic here 

I can put up a patch based on what  approach is advised ?





  was:
When using Async Processor, there is a class cast exception when you call the 
onError function on AsyncMethodCallback with an exception other than the 
expected exception 

This occurs because the org.apache.thrift.TApplicationException being cast as 
(org.apache.thrift.TBase) in the generated code for a service 

{code:title=Bar.java|borderStyle=solid}

    indent(f_service_) << "{" << endl;
    indent_up();
    indent(f_service_) << "msgType = 
org.apache.thrift.protocol.TMessageType.EXCEPTION;" << endl;
    indent(f_service_) << "msg = (org.apache.thrift.TBase)new "
                          
"org.apache.thrift.TApplicationException(org.apache.thrift."
                          "TApplicationException.INTERNAL_ERROR, 
e.getMessage());" << endl;
    indent_down();
    indent(f_service_) << "}" << endl;
{code}
link : [github-trunk 
|https://github.com/apache/thrift/blob/master/compiler/cpp/src/generate/t_java_generator.cc#L3209-L3221]

There are two ways to solve this :
* one is make TApplicationException to extend TBase
* another is to change the generation logic here 

I can put up a patch based on what  approach is advised ?






> Class Cast Exception in Generated Java AsyncProcessor
> -----------------------------------------------------
>
>                 Key: THRIFT-2988
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2988
>             Project: Thrift
>          Issue Type: Bug
>          Components: Java - Compiler, Java - Library
>            Reporter: deepankar
>            Priority: Critical
>
> When using a generated Async Processor for any service, there is a class cast 
> exception that can happen when you call the onError function on a returned 
> AsyncMethodCallback (returned from any class that extends 
> {{AsyncProcessFunction}}) with an exception other than the expected exception 
> for that method
> This occurs because the org.apache.thrift.TApplicationException being cast as 
> (org.apache.thrift.TBase) in the generated code for a service 
> {code:title=Bar.java|borderStyle=solid}
>     indent(f_service_) << "{" << endl;
>     indent_up();
>     indent(f_service_) << "msgType = 
> org.apache.thrift.protocol.TMessageType.EXCEPTION;" << endl;
>     indent(f_service_) << "msg = (org.apache.thrift.TBase)new "
>                           
> "org.apache.thrift.TApplicationException(org.apache.thrift."
>                           "TApplicationException.INTERNAL_ERROR, 
> e.getMessage());" << endl;
>     indent_down();
>     indent(f_service_) << "}" << endl;
> {code}
> link : [code-in-github-trunk 
> |https://github.com/apache/thrift/blob/master/compiler/cpp/src/generate/t_java_generator.cc#L3209-L3221]
> There are two ways to solve this :
> * one is make TApplicationException to extend TBase
> * another is to change the code generation logic here 
> I can put up a patch based on what  approach is advised ?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to