> 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.


Reply via email to