> I just started looking into protobuf for a project of mine. > From the Java Api page I could not really find how to parse a > generated (compiled .proto is present) but "unknown" message. > > So for example: I have messages types MessageA and MessageB. The > client component receives some bytes representing a message of type A > OR B. Do I have to add information of the type of message that's been > send, or is there an easy way of automatically parsing the message > like: > > byte[] b; //hols byte representation of message > Message message = foo(b); //parse message > if(message instanceof MessageA) > System.out.println("was type A"); > else > System.out.println("was type B");
No, there's no way to do this, because the wire format doesn't include information about the type of message. It's even possible that the same set of bytes could be a valid message of both types. The usual way to handle this is to create a wrapper message that can hold either, like so: // Only one field may be filled out message AorB { optional MessageA message_a; optional MessageB message_b; } And then you can parse it via: AorB result = AorB.parseFrom(data); if (result.hasMessageA()) { System.out.println("Was type A"); } else if (result.hasMessageB()) { System.out.println("Was type B"); } - Adam -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To post to this group, send email to proto...@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.