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