我有我的協議緩衝區中定義的消息字段FieldDescriptor。我想開始爲該字段創建一個值,但是我試圖爲該FieldDescriptor獲取一個Message.Builder。我正在編寫的代碼非常通用 - 它被設計爲在MongoDB和Protocol Buffers之間進行序列化 - 所以我不能使用任何專用邏輯來處理當前正在使用的對象。Java中的Protobufs:你如何從FieldDescriptor獲得Message.Builder?
FieldDescriptor的JavaType是MESSAGE。它的MessageType稍好一些,因爲它包含消息的類型,但是類型在協議緩衝區命名空間中,所以我仍然不能使用反射來爲它獲取消息(至少不是乾淨地)。
我不知道還有什麼辦法。任何人都知道如何從FieldDescriptor構建Message.Builder?
我做了將protobuf消息轉換爲sql和sql到proto的相同任務。 FieldDescriptor包含getMessageType()方法,它返回包含字段列表的Descriptors.Descriptor。從Descriptor構造Message.Builder有點棘手,當我來到辦公室時,我會展示解決方案 – ancalled 2015-01-27 01:54:59
聽起來好像被喚醒會爲您提供答案;但您可以使用DynamicMessage(https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/DynamicMessage),特別是DynamicMessage.newBuilder()和DynamicMessage.parseFrom()來處理協議動態緩衝消息。一個例子是https://gist.github.com/nandub/950285 – 2015-01-27 03:33:19