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