Can you pre-process the .proto file(s) into a FileDescriptorSet first? protoc can do this, using the --descriptor_set_out flag, like: protoc --descriptor_set_out=my_descriptor_set my_file.proto another_file.proto ...
my_descriptor_set will then be an encoded set of FileDescriptorProtos, which you can use to build FileDescriptors, which you can then use to build DynamicMessages. If you were using C++ you could use libprotoc directly, but there is no Java-native parser for .proto files. I suppose you could run protoc as a background process, though. On Mon, Mar 23, 2009 at 3:01 PM, kimchy <kim...@gmail.com> wrote: > > What I meant is that I have the .proto file, but not the generated > types it has (I am using Java on the server side). What I am looking > for is something like this: > > Map<String, Descriptor> descriptorsByMessageName = new HashMap<>(); > > for (protoFile : all proto files) { > InputStream is = // open input stream against .proto located on FS/ > ClassLoader > FileDescriptor fd = // how do I do this? basically, parse it from > is > for (Desc desc : fd.getMessageDesc()) { > descriptorsByMessageName(desc.getName(), desc); > } > } > > Then, once I have the map constructed, I can create DynamicMessage > based on message Names lookup keys to get the appropriate Descriptor, > and an InputStream that holds the actual message content. This will > allow me to write code on the server side that works without actually > needing the Java types generated from the proto files, but instead use > the DynamicMessage to get values out of a protobuf stream. > > Cheers, > Shay > > > On Mar 23, 11:47 pm, Kenton Varda <ken...@google.com> wrote: > > I'm a little confused by your message. You say you have the .proto > files, > > but you don't know the types? But don't the .proto files define the > types? > > Did you mean to say that you only have actual data encoded as these > types, > > and you don't have the type definitions (the .proto files) at all? In > that > > case, no, you can't construct a DynamicMessage from them -- the best you > can > > do is decode them as an UnknownFieldSet, which doesn't give you much > > information. > > If you want your data to be self-describing, you could send along a > > FileDescriptorSet (defined in google/protobuf/descriptor.proto) > containing > > the type definitions. From that you can construct descriptors and thus > > DynamicMessages. > > > > > > > > On Mon, Mar 23, 2009 at 2:34 PM, kimchy <kim...@gmail.com> wrote: > > > > > Hi, > > > > > I am trying to use protocol buffer on the server side without > > > knowing the types it needs to use, just based on the .proto files, is > > > that possible? Basically, what I was hoping for is some way to be able > > > to read proto files into a Descriptor, and then use DynamicMessage to > > > get values from it. Is that even possible? > > > > > Cheers, > > > Shay > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To post to this group, send email to protobuf@googlegroups.com To unsubscribe from this group, send email to protobuf+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/protobuf?hl=en -~----------~----~----~----~------~----~------~--~---