将Thrift与Java一起使用,org.apache.Thrift.TApplicationException未知结果
我试图用将Thrift与Java一起使用,org.apache.Thrift.TApplicationException未知结果,java,rpc,thrift,thrift-protocol,Java,Rpc,Thrift,Thrift Protocol,我试图用节俭编写一个RPC,客户端似乎与服务器通信很好,服务器创建了一个列表以返回到客户端(正确的格式)。但是,当我出现以下错误时,客户端不知何故无法识别数据包: org.apache.thrift.TApplicationException:getEntityByIP失败:未知结果 这是我的旧文件的外观: struct EntityLookupMessage{ 1: list<i32> entityIDs; } service EntityJoinService { list
节俭
编写一个RPC
,客户端似乎与服务器通信很好,服务器创建了一个列表以返回到客户端(正确的格式)。但是,当我出现以下错误时,客户端不知何故无法识别数据包:
org.apache.thrift.TApplicationException:getEntityByIP失败:未知结果
这是我的旧文件的外观:
struct EntityLookupMessage{
1: list<i32> entityIDs;
}
service EntityJoinService {
list<i32> getEntityByIP(1:string IPval,2:i32 date);
}
struct EntityLookupMessage{
1:列出实体ID;
}
服务实体JoinService{
列出getEntityByIP(1:stringIPVAL,2:i32日期);
}
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
}
public List getEntityByIP(字符串IPval,int-date)抛出异常{
试一试{
System.out.println(“检查…”+IPval);
列表响应=EntityJoinStandalone.getEntityByIP(entityLookup,IPval,date);
System.out.println(响应);
返回响应;
}最后{
//TODO自动生成的方法存根
返回空
}
由这样的客户端调用:
List<Integer> entity = client.getEntityByIP(IPval, date);
List entity=client.getEntityByIP(IPval,日期);
你知道为什么会这样吗?原因
Thrift by design不允许空结果。这是生成的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");
}
通过这种方式,您还可以进一步改进,您可以随时向
结构添加新字段。但是列表不是空的。我在返回之前打印它,它不是空的。它是[1002]。难怪。您认为在finally分支中会发生什么?打印什么无关紧要()在你回来之前。真正重要的是你最终返回了什么(双关语)。啊,好吧,太生疏了,我的异常在Java中捕获。
struct EntityByIP_result {
1: list<i32> data;
}