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

Iker Jimenez edited comment on THRIFT-2157 at 3/25/15 8:38 PM:
---------------------------------------------------------------

Hi [~jensg],
so I've looked into this a bit further. Only scratched the surface of it, so 
allow for some imprecisions. 
It looks like the way the Thrift Java API and 
compiler/cpp/src/generate/t_java_generator.cc are written forces everything to 
be a TBase type of object. Notice how, even though the snippet above doesn't 
show it, msg is defined to be of type TBase (this is coming from 
t_java_generator.cc).

[~dvdreddy] at THRIFT-2988 is spot on, there is one imprecission though, which 
might make you reconsider his first proposal.

TBase is not a class but an interface, notice how custom exceptions are 
actually generated as "extends TException implements TBase"

The code generation logic is written assuming that because custom exceptions do 
implement TBase, then TApplicationException does too.

I do not see an easy way of changing the code generator to work around the fact 
that TApplicationException doesn't implement TBase.

Since custom exceptions already implement TBase, I don't see any reason why 
TApplicationException couldn't too. My proposal would go towards making 
TApplicationException implement TBase, you wouldn't need to change the class 
hierarchy this way and it would be backwards compatible.

Thanks.


was (Author: iker.jimenez):
Hi [~jensg],
so I've looked into this a bit further. Only scratched the surface of it, so 
allow for some imprecissions. 
It looks like the way the Thrift Java API and 
compiler/cpp/src/generate/t_java_generator.cc are written forces everything to 
be a TBase type of object. Notice how, even though the snippet above doesn't 
show it, msg is defined to be of type TBase (this is coming from 
t_java_generator.cc).

[~dvdreddy] at THRIFT-2988 is spot on, there is one imprecission though, which 
might make you reconsider his first proposal.

TBase is not a class but an interface, notice how custom exceptions are 
actually generated as "extends TException implements TBase"

The code generation logic is written assuming that because custom exceptions do 
implement TBase, then TApplicationException does too.

I do not see an easy way of changing the code generator to work around the fact 
that TApplicationException doesn't implement TBase.

Since custom exceptions already implement TBase, I don't see any reason why 
TApplicationException couldn't too. My proposal would go towards making 
TApplicationException implement TBase, you wouldn't need to change the class 
hierarchy this way and it would be backwards compatible.

Thanks.

> generated code would cause ClassCastException
> ---------------------------------------------
>
>                 Key: THRIFT-2157
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2157
>             Project: Thrift
>          Issue Type: Bug
>          Components: Java - Compiler
>    Affects Versions: 0.9.1
>            Reporter: Dave Brosius
>            Priority: Trivial
>
> Looking at the thrift generated code for cassandra, i'm seeing
>  msg = (org.apache.thrift.TBase)new 
> org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR,
>  e.getMessage());
> as seen here
> https://git-wip-us.apache.org/repos/asf?p=cassandra.git;a=blob;f=interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java;h=837acfc0e964249fd62720420e8f1f85d966f1a3;hb=8f202895ab9e17c3d6bd4965924fd5f1ffc27f94#l6095
> i don't see how TApplicationException can be cast to TBase, and so i'd expect 
> a ClassCastException there.



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

Reply via email to