Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Thrift与Java一起使用,org.apache.Thrift.TApplicationException未知结果_Java_Rpc_Thrift_Thrift Protocol - Fatal编程技术网

将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;
}