线上使用thrift rpc是,发现客户端报错:
Caused by: java.lang.NullPointerException
at org.apache.thrift.protocol.TBinaryProtocol.writeString(TBinaryProtocol.java:200)
at com.abc.test.recothrift.model.RecoRequest$RecoRequestStandardScheme.write(RecoRequest.java:384)
at com.abc.test.recothrift.model.RecoRequest$RecoRequestStandardScheme.write(RecoRequest.java:332)
at com.abc.test.recothrift.model.RecoRequest.write(RecoRequest.java:286)
at com.abc.test.recothrift.service.IPersonalRecoService$recommend_args$recommend_argsStandardScheme.write(IPersonalRecoService.java:571)
at com.abc.test.recothrift.service.IPersonalRecoService$recommend_args$recommend_argsStandardScheme.write(IPersonalRecoService.java:535)
at com.abc.test.recothrift.service.IPersonalRecoService$recommend_args.write(IPersonalRecoService.java:486)
at org.apache.thrift.TServiceClient.sendBase(TServiceClient.java:63)
at com.abc.test.recothrift.service.IPersonalRecoService$Client.send_recommend(IPersonalRecoService.java:82)
at com.abc.test.recothrift.service.IPersonalRecoService$Client.recommend(IPersonalRecoService.java:74)
... 51 more
根据报错信息,可以定位是thrift底层错误,而且是thrift消息对象报出来的,查看消息
struct RecoRequest {
1:map<string,string> params
}
发现如果params的map结构中如果有null,就会导致thrift报错。或者对于thrift的list结构中有null也会报上面的错。