Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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
回调方法读取标题数据。使用grpcjava_Java_Protocol Buffers_Grpc_Grpc Java - Fatal编程技术网

回调方法读取标题数据。使用grpcjava

回调方法读取标题数据。使用grpcjava,java,protocol-buffers,grpc,grpc-java,Java,Protocol Buffers,Grpc,Grpc Java,我正在使用Protoc3.0,并编写了回调方法来使用java读取GRPC流数据 @Override public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall( final MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) { return new F

我正在使用Protoc3.0,并编写了回调方法来使用java读取GRPC流数据

@Override
    public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
            final MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {

        return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(
                next.newCall(method, callOptions)) {

            @Override
            public void start(Listener<RespT> responseListener, Metadata headers) {


                ClientCall.Listener<RespT> listener = new ClientCall.Listener<RespT>() {

                    @Override
                  public void onHeaders(Metadata headers) {
                        System.out.println("Header received" +headers);             
                        super.onHeaders(headers);

                    }

                };
                super.start(listener, headers);
            }
        };
    }
};
@覆盖
公用客户端呼叫截取呼叫(
最终方法描述符方法,调用选项调用选项,通道下一步){
返回新的ForwardingClientCall.SimpleForwardingClientCall(
next.newCall(方法,callOptions)){
@凌驾
公共void开始(侦听器响应侦听器、元数据头){
ClientCall.Listener侦听器=新建ClientCall.Listener(){
@凌驾
公共void onHeaders(元数据头){
System.out.println(“接收到的标题”+标题);
super.onHeaders(headers);
}
};
super.start(侦听器、头文件);
}
};
}
};
现在我看到的是,一旦我到达onhd,程序将无限期地等待。这正常吗。一旦执行了头方法,我如何恢复读取正常流数据

编辑-1 因此,链接将类似于-

@Override
    public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
            final MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {

        return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(
                next.newCall(method, callOptions)) {

            @Override
        public void start(Listener<RespT> responseListener, Metadata headers) {

             responseListener = new SimpleForwardingClientCallListener<RespT>(responseListener) {

                  @Override
                  public void onHeaders(Metadata headers) {
                      System.out.println("Header found"+ headers);
                      super.onHeaders(headers);
                  }
             };


                ClientCall.Listener<RespT> listener = new ClientCall.Listener<RespT>() {

                    @Override
                  public void onHeaders(Metadata headers) {
                        System.out.println("Header received" +headers);             
                        super.onHeaders(headers);

                    }

                };
                super.start(listener, headers);
            }
        };
    }
};
@覆盖
公用客户端呼叫截取呼叫(
最终方法描述符方法,调用选项调用选项,通道下一步){
返回新的ForwardingClientCall.SimpleForwardingClientCall(
next.newCall(方法,callOptions)){
@凌驾
公共void开始(侦听器响应侦听器、元数据头){
responseListener=新的SimpleForwardingClientCallListener(responseListener){
@凌驾
公共void onHeaders(元数据头){
System.out.println(“找到标题”+标题);
super.onHeaders(headers);
}
};
ClientCall.Listener侦听器=新建ClientCall.Listener(){
@凌驾
公共void onHeaders(元数据头){
System.out.println(“接收到的标题”+标题);
super.onHeaders(headers);
}
};
super.start(侦听器、头文件);
}
};
}
};

您没有链接到
响应侦听器
。您应该对侦听器使用
SimpleForwardingClientCallListener
,这与您对调用所做的操作类似

@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
    responseListener = new SimpleForwardingClientCallListener<RespT>(responseListener) {
    ...
@覆盖
公共void开始(侦听器响应侦听器、元数据头){
responseListener=新的SimpleForwardingClientCallListener(responseListener){
...

否,因为您仍然没有使用
响应侦听器
。您需要删除`new ClientCall.Listener()`并将
SimpleForwardingClientCallListener
传递给
super.start()