2016-03-04 65 views
1

我有一個grpc服務代碼,使用maven protoc插件0.4.2和grpc 0.8.0編譯。我試圖用dataFlow sdk 1.4.0使用這個生成的代碼,但當我嘗試使用阻塞存根創建grpc客戶端時,出現此錯誤。grpc with dataflow - java.lang.NoSuchMethodError

com.google.cloud.dataflow.sdk.Pipeline$PipelineExecutionException: java.lang.NoSuchMethodError: io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/MessageLite;)Lio/grpc/MethodDescriptor$Marshaller; 
    at com.google.cloud.dataflow.sdk.Pipeline.run(Pipeline.java:186) 

我不知道這是否是因爲一些差異與數據流SDK中使用的protobuf的版本和GRPC生成的代碼之間。 當我在管道

com.google.cloud.dataflow.sdk.Pipeline$PipelineExecutionException: java.lang.NoSuchMethodError: com.google.protobuf.GeneratedMessage.computeStringSize(ILjava/lang/Object;)I 
    at com.google.cloud.dataflow.sdk.Pipeline.run(Pipeline.java:186) 

我已經從Maven的數據流SDK的依賴,唯一的protobuf和GROC封裝,顯示了排除protobuf的嘗試輸出從DOFN的之一protobuf的消息,我也得到這個錯誤在我的依賴樹中分別是3.0.0-alpha-3.1和0.8.0。

回答

0

一個快速注意:PipelineExecutionException只是表示執行管道時在用戶代碼中發生錯誤,所以它沒有多大關聯。您需要關注該故障的原因及其堆棧跟蹤。

您的兩個錯誤彼此稍有不同,但每個錯誤都表明運行時使用的協議緩衝區庫的版本與生成協議緩衝區消息類的版本不匹配。

1

ProtoUtils.marshaller(MessageLite)被添加到grpc-java 0.9.0; grpc-java 0.8.0使用了一個Parser對象。嘗試更新你的grpc-java版本。

這與protobuf類似的問題。該方法已添加到v3.0.0-alpha-4中。

+0

僅供參考此ProtoUtils.marshaller已移至ProtoLiteUtils發佈0.14 –

相關問題