即使设置了“__set_what_UTF8”也始终显示 "Default TException."

Always showing "Default TException." even when "__set_what_UTF8" is set

我是 Thrift 的新手。 在调用 Thrift API 之后,我总是遇到异常问题 "Default TException." 在服务器端,有一个定义的异常:"Invalid_argument_error"。

Invalid_argument_error exp;
std::string error_string = "Invalid Argument!";
exp.__set_what_UTF8(error_string);
throw exp;

然后抓住它...

catch (Invalid_argument_error &e)
{
    Invalid_argument_error t;
    t.__set_what_UTF8(e.what());
}

即使我设置了异常的原因,我在 Thrift 客户端上也得到了错误的原因。 任何帮助将不胜感激。

当服务器端出现异常,然后将其传递给客户端,必须有两件事:

如果第一点不满足,那么在大多数情况下你会在客户端收到一个通用的TApplicationException,或者连接可能会断开(库中有一些实现差异,这是正在合并中)。

如果不满足第二点,假设您正在抛出一个正确派生的异常,则不会有生成的代码来序列化或反序列化它。因此,您基本上得到与上述相同的结果,但出于不同的原因。

来自上面链接的文档:

Functions
[21] Function        ::=  'oneway'? FunctionType Identifier '(' Field* ')' Throws? ListSeparator?
[22] FunctionType    ::=  FieldType | 'void'
[23] Throws          ::=  'throws' '(' Field* ')'