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

Jens Geyer resolved THRIFT-5333.
--------------------------------
      Assignee: Jens Geyer
    Resolution: Works for Me

> Exceptions defined in IDL to extend Exception rather than TException
> --------------------------------------------------------------------
>
>                 Key: THRIFT-5333
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5333
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Java - Compiler
>    Affects Versions: 0.13.0
>            Reporter: Denys Rtveliashvili
>            Assignee: Jens Geyer
>            Priority: Major
>
> At the moment, if an exception is defined in IDL and Java code is generated 
> for it, the exception would be defined as extending TException like this:
> {code:java}
> public class MyException extends org.apache.thrift.TException implements ...
> {code}
> At the same time, definition of methods looks like this:
> {code:java}
> public int myMethod(int argument) throws MyException, 
> org.apache.thrift.TException {
> ...
> }{code}
> Here, TException has to be included as that is the only way to signal that 
> RPC call has failed for whatever reason.
> Now the problem with this is that if one calls a method like that, it is 
> obvious that TException covers all those exceptions defined in IDL and so 
> there is no way to clearly see which exceptions are result of internal 
> workings of Thrift and which ones correspond to situations described in IDL:
> {code:java}
> try {
>   myMethod(123);
> } catch (TException e) {
>   log.error("Problem spotted", e);
> }{code}
>  
> Why not make extensions extend java.lang.Exception instead?
> {code:java}
> public class MyException extends java.lang.Exception implements ...{code}
> This would have made it clear which exceptions are throwable by the call as 
> "catch (TException e)" would not catch them and explicit catching would be in 
> order:
> {code:java}
> try {
>  myMethod(123);
> } catch (MyException e) {
>  log.error("MyException has been thrown");
> } catch (TException e) {
>  log.error("Problem spotted", e);
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to