当前位置: 首页 > 知识库问答 >
问题:

grpc:服务器无法对响应进行编码:rpc错误:代码=内部描述=grpc:封送处理时出错:proto:用nil调用封送处理

孔鹤龄
2023-03-14

理想情况下,以下RPC应该接收消息并封送到JSON。但是,遇到了以下错误:错误:2018/08/12 13:43:07 grpc:服务器未能对响应进行编码:rpc错误:code=Internal desc=grpc:封送时出错:proto:Marshal调用时使用nil

func (s *beaconServer) Transmit(ctx context.Context, batch *pb.Batch) (*pb.Empty, error) {
    var empty *pb.Empty

    var messageJSON bytes.Buffer
    marshaler := &jsonpb.Marshaler{
        OrigName: true,
    }
    err := marshaler.Marshal(&messageJSON, batch)
    if err != nil {
        return empty, err
    }

    log.Println(string(messageJSON.Bytes()))
    return empty, nil
}

返回

2018/08/12 14:24:09 beacon.go:34: {"stream_id":"abc11","event_type":"e","events":[{"file_path":"/tmp/python.py","location":"256","count":"30"},{"file_path":"/tmp/temp.py","location":"253","count":"305"}],"start_time":"2038-01-19 03:14:07","end_time":"2038-01-19 03:14:27"}
ERROR: 2018/08/12 14:24:09 grpc: server failed to encode response:  rpc error: code = Internal desc = grpc: error while marshaling: proto: Marshal called with nil

共有1个答案

章高朗
2023-03-14

该错误可能不是由此代码块中的封送器引起的

当您执行var empty*pb时。Empty您正在创建一个未初始化的变量*pb。空的nil。很可能是上游某个试图封送此的东西导致了错误。

可运行的示例如下:https://play.golang.org/p/QsNCWXM615Q

如果你想初始化为空,那么你应该做返回new(pb。空),nil

 类似资料:
  • 环境 问题 我正在测试Go实现的grpc服务器和客户端 首先,我进行了proto定义,并通过proto命令生成pb代码。我提到了这个解决方案。下面的错误以最小代码打印,以重现我的错误。 错误 密码 你好原型 main_test.go

  • 问题内容: 我有一个新编码的GWT / GAE应用,该应用在客户端上使用RequestFactory和Editors,在背面使用自定义的Objectify DAO服务。 flush()然后persist()路径在成功时可以正常工作。客户端JSR 303也可以正常工作。 我的问题是如何触发服务器警告/错误并处理UI更新? 我在http://turbomanage.wordpress.com/2010

  • 问题内容: 我有许多需要自定义编组的结构。在测试时,我使用的是JSON和标准的JSON marshaller。由于它不会封送未导出的字段,因此我需要编写一个自定义的MarshalJSON函数,该函数运行良好。当我在父结构上调用json.Marshal时,该结构包含需要自定义编组的字段,它工作正常。 现在,我需要将所有内容封送给BSON进行MongoDB的工作,而我找不到任何有关如何编写自定义BSO

  • 问题内容: 在过去的几天中,我尝试使用MOXy JAXB支持对Hibernate模型的XML编组/解组。尝试执行此操作时,我遇到了hibernate代理对象的问题。考虑类似: 我尝试通过以下方式使用MOXy JAXB映射此代码: 我的问题是,hibernate实例化了通过在User上调用getAddress()获得的地址的代理对象。然后,当JAXB尝试封送对象时,它无法发现它实际上是它要封送的Co

  • 我试图了解gRPC中的异常处理机制是如何工作的。 除了try-catch块之外,还有其他方法来处理运行时异常,例如服务器端的IllegalArgumentException吗? 例如,我有一些gRPC流式客户端服务,当传递的参数不满足深层次的一些断言时(在某些库中,例如,com.google.common.base.Preconditions),方法onNext抛出IllegalArgumentE

  • 我在jmeter V3中录制了脚本。3通过IE浏览器,然后进行关联。当我运行这个脚本时,它会收到内部服务器错误500的响应,但是它在IE浏览器中手动工作正常,而且在记录这个场景时,它不会发生。 我还在网络IE F12开发者工具中交叉验证了头管理器和请求头,它是最新的。 取样器请求 获取请求 它只是一个简单的获取请求。非常感谢您在jmeter中帮助处理此错误。