强大、牛X的RPC框架 - thrift,就没怂过!

问题

在用thrift做RPC框架存在服务端有时需要返回null 的情况,这时客户端就报 org.apache.thrift.TApplicationException: detectEvent failed: unknown result 异常。

原因

点击去,查看service类时发现thrift 服务端返回null时,会抛出异常,也就是不接受null的情况。

1
2
3
4
5
6
7
8
9
public java.util.Set<Bean> recv_detectWord() throws org.apache.thrift.TException
{
detectWord_result result = new detectWord_result();
receiveBase(result, "detectWord");
if (result.isSetSuccess()) {
return result.success;
}
throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "detectWord failed: unknown result");
}

但是这个异常出现有两个可能的原因是:

  • 服务器抛出一个(未捕获)的异常。
  • 你试图返回一个空结果,这是Thrift非法的。

解决

问题找到后,就简单了。客户端代码抓取TApplicationException异常,再处理你的事即可。

1
2
3
4
5
6
7
8
9
10
try {
Bean response = client.detectEvent(titleSplit, contentSplit, domains);

if (response != null) {
System.out.println(response.toString());
}

} catch (org.apache.thrift.TApplicationException e) {
System.out.println("response is null");
}

完结,希望能帮助你!