gpt4 book ai didi

java - 将 Thrift 与 Java 结合使用,org.apache.thrift.TApplicationException 未知结果

转载 作者:行者123 更新时间:2023-11-29 05:26:46 27 4
gpt4 key购买 nike

我正在尝试用 Thrift 编写一个 RPC,客户端似乎可以很好地与服务器通信,并且服务器创建一个列表返回给客户端(正确的格式)。但是当我收到此错误时,客户端以某种方式无法识别数据包:

org.apache.thrift.TApplicationException: getEntityByIP failed: unknown result

这是我的 thrift 文件的样子:

struct EntityLookupMessage{
1: list<i32> entityIDs;
}
service EntityJoinService {
list<i32> getEntityByIP(1:string IPval,2:i32 date);
}

而ServerImpl是以下方法:

public List<Integer> getEntityByIP(String IPval, int date) throws TException {
try{
System.out.println("Checking..."+IPval);
List<Integer> response=EntityJoinStandalone.getEntityByIP(entityLookup,IPval, date);
System.out.println(response);
return response;
}finally{
// TODO Auto-generated method stub
return null
}

客户端这样调用:

List<Integer> entity = client.getEntityByIP(IPval, date); 

知道为什么会这样吗?

最佳答案

原因

Thrift 设计不允许出现空结果。这是生成的 recv_Xxx() 函数的代码:

public List<Integer> recv_getEntityByIP() throws org.apache.thrift.TException
{
getEntityByIP_result result = new getEntityByIP_result();
receiveBase(result, "getEntityByIP");
if (result.isSetSuccess()) {
return result.success;
}
throw new org.apache.thrift.TApplicationException(
org.apache.thrift.TApplicationException.MISSING_RESULT,
"getEntityByIP failed: unknown result");
}

你必须返回一个有效的结果,也就是......

  • 一个有效列表,可以为空,但不能为null
  • 服务器抛出异常

解决方案

finally 子句中删除 return null

最佳实践

将结果放入一个对象中,类似于您对 args 所做的:

struct EntityByIP_result {
1: list<i32> data;
}

这样您也为以后的进一步改进留下了空间,您可以随时向 struct 添加新字段。

关于java - 将 Thrift 与 Java 结合使用,org.apache.thrift.TApplicationException 未知结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com