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

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

本文关键字:TException 显示 Default what 设置 set UTF8      更新时间:2023-10-16

我是节俭的新手。 调用Thrift API后,我总是遇到异常问题,即"默认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 客户端上错误地得到了原因。 任何帮助将不胜感激。

当在服务器端引发异常时,要将其传递到客户端,必须做好两件事:

  • 异常类型需要派生自TException
  • IDL 中的函数调用必须提及异常类型

如果不满足第一点,那么在大多数情况下,您将在客户端收到通用TApplicationException,或者连接可能只是断开连接(库中存在一些实现差异,这是正在整合的过程中(。

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

从上面链接的文档:

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