Jens Geyer created THRIFT-4562:
----------------------------------

             Summary: Calling wrong exception CTOR leads to "call failed: 
unknown result" instead of the real exception being thrown
                 Key: THRIFT-4562
                 URL: https://issues.apache.org/jira/browse/THRIFT-4562
             Project: Thrift
          Issue Type: Bug
          Components: Delphi - Compiler
            Reporter: Jens Geyer


h2. Problem
# In contrast to other languages, there is no real way to prevent Delphi from 
inheriting unwanted CTORs.
 # The generated code initializes an "exception factory" helper object used for 
serializing the exception info over the wire. This helper object is 
instantiated in two cases:
 ** a) in the CTORs that are defined in the exception class
 ** b) when a property setter is called on that instance

h2. Example

The following IDL:
{code:java}
exception ApiException {
 1: string     Msg
 2: ErrorCode  Error
}
{code}
results in this Delphi code:
{code:java}
TApiException = class(TException)
// ... some unrelevant details omitted ...
public
  constructor Create; overload;
  constructor Create( const AMsg: System.string; AError: TErrorCode); overload;
  // ... more code ...
end; 
{code}
Due to the inheritance from {{TException}} and finally {{System.Exception}}, a 
bunch of other CTORs is inherited, such as:
{code:java}
  constructor Create(const Msg: string);
{code}
>From this, a situation may arise, in which the developer instantiates the 
>instance by calling one of the inherited CTORs (which do not intialize the 
>Factory helper object), then raising the exception without assigning any other 
>values via property setter. 

Under these circumstances, the Factory helper object is left at its default 
value of {{nil}}, hence no suitable information is written to the wire. As a 
direct result, being unable to deserialize anything useful on return, the 
client code will run into the default catcher code which raises an generic 
TApplicationException with {{MissingResult}} code and the "call failed: unknown 
result" message.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to