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

Yuxuan Wang commented on THRIFT-5333:
-------------------------------------

There are only 3 thrift-internal TExceptions: TApplicationException, 
TTransportException, and TProtocolException, so it's far easier to write it 
this way:

{code:java}
try {
  ...
} catch (TApplicationException | TTransportException | TProtocolException e) {
  // do something about thrift-internal matters
} catch (TException e) {
  // handle IDL exceptions
}
{code}

> 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
>            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