Всегда показывает «TException по умолчанию». даже когда "__set_what_UTF8" установлен - PullRequest
0 голосов
/ 16 января 2020

Я новичок ie на Thrift. После вызова 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. Любая помощь будет оценена.

1 Ответ

1 голос
/ 16 января 2020

Когда на стороне сервера возникает исключение, то для его доставки клиенту должны быть две вещи:

  • тип исключения должен быть получен из TException
  • вызов функции в IDL должен включать тип исключения

Если первая точка не удовлетворена, то в большинстве случаев вы получите общий c TApplicationException на клиенте, иначе соединение может просто отключиться (в библиотеках есть некоторые различия в реализации, это происходит в процессе консолидации).

Если второй пункт не выполняется Предполагается, что вы генерируете правильно выведенное исключение, поэтому не будет сгенерированного кода для его сериализации или десериализации. Следовательно, вы в основном получаете тот же результат, что и выше, но по другой причине.

Из документов, связанных выше:

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