A serialized protocol buffer doesn't include any type information, so before you can parse one you have to know in advance which type you're expecting. If you want to be prepared to accept either A or B, then a good solution is to put both types inside a oneof in a parent message, and then just parse the parent message normally.
It doesn't matter which protobuf implementation created the .pb file, since all implementations use the same wire format. That is true that the Java lite implementation doesn't support reflection and doesn't include descriptors, so it cannot serialize protos to JSON. If you can stick to the binary format then that would be ideal since that format is useable everywhere. On Thu, Feb 23, 2023 at 5:33 PM ritesh singh <[email protected]> wrote: > Also does it matter if .pb was created using proto lite and android end. > > I believe the lite version doesn't store fields, so converting it to json > using proto-util won't work and i need to make use of reflection. > > On Fri, 24 Feb, 2023, 6:54 am ritesh singh, <[email protected]> > wrote: > >> Thanks Adam. I will give it a shot. I thought of using *protoc* >> compiler, but what if my proto file contains nested messages >> >> >> >> >> *message A { B b = 1}* >> *message B {* >> *}* >> >> >> After running *protoc *on the proto file, it will generate 2 java >> classes. I won't know which generated class to use against my .pb file, as >> my plugin is only aware of .pb and .proto file. >> >> Please correct me, if am wrong. >> On Friday, February 24, 2023 at 6:42:05 AM UTC+5:30 Adam Cozzette wrote: >> >>> I suspect that your code is getting an error because it's trying to >>> parse a .proto file as a serialized protocol buffer. (This won't work since >>> .proto files use a text representation very different from the standard >>> protobuf binary format.) Probably the best way to fix this problem would be >>> to invoke protoc with --descriptor_set_out to parse the proto file and >>> convert it into a serialized FileDescriptorSet. A FileDescriptorSet is just >>> a protocol buffer, so once you have it in that form you can easily parse it >>> like you would parse any other serialized proto. >>> >>> On Thu, Feb 23, 2023 at 4:59 PM ritesh singh <[email protected]> >>> wrote: >>> >>>> Hello, >>>> >>>> I am working on creating a Android Studio plugin for proto data store. >>>> Android uses proto-lite, my current approach, i get the .pb file and >>>> .proto file and use the same in intellij plugin to deserialise it. >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> *val psiFile = PsiManager.getInstance(project).findFile(protoFile) val >>>> protoFileContent = psiFile!!.text val fileDescriptorProto: >>>> DescriptorProtos.FileDescriptorProto = >>>> DescriptorProtos.FileDescriptorProto.parseFrom(protoFileContent.byteInputStream()) >>>> val fileDescriptor = >>>> Descriptors.FileDescriptor.buildFrom(fileDescriptorProto, arrayOfNulls(0)) >>>> val messageDescriptor = fileDescriptor.messageTypes[0] val buffer = >>>> pbFile.contentsToByteArray() val messageBuilder: DynamicMessage.Builder = >>>> DynamicMessage.newBuilder(messageDescriptor) >>>> messageBuilder.mergeFrom(buffer) val message = messageBuilder.build() val >>>> text: String = TextFormat.printToString(message)* >>>> >>>> Above code is throwing error in parsing step,* Protocol message tag >>>> had invalid wire type.* >>>> >>>> Thanks in advance. >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Protocol Buffers" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/protobuf/7fe3a019-e846-4792-8d8a-1655a2d93975n%40googlegroups.com >>>> <https://groups.google.com/d/msgid/protobuf/7fe3a019-e846-4792-8d8a-1655a2d93975n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "Protocol Buffers" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/protobuf/5042e4c5-2643-4587-812a-730206f14424n%40googlegroups.com >> <https://groups.google.com/d/msgid/protobuf/5042e4c5-2643-4587-812a-730206f14424n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- > You received this message because you are subscribed to the Google Groups > "Protocol Buffers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/protobuf/CABaCSzEG%2B19VhXjsYJpphbxA%2B3s7mAmUSiDF_Kmkkr5_Y0A%3Dsg%40mail.gmail.com > <https://groups.google.com/d/msgid/protobuf/CABaCSzEG%2B19VhXjsYJpphbxA%2B3s7mAmUSiDF_Kmkkr5_Y0A%3Dsg%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/protobuf/CADqAXr7B7OwERETdCfKm%2BJ2mpgL%3DP3QQuYdWCQ1khkr%3DNx4MBg%40mail.gmail.com.
