Right, I'm thinking too Java-centric - I can see why that is the case now.
So if I want the messages to be seen differently by my code, I'll need to
deal with it outside the library (The messages are different, but only in
fields which are optional - and in this case, they don't actually conflict)
Thanks!
On Monday, December 22, 2014 1:32:32 PM UTC-5, Ryan O'Meara wrote:
>
> Hi,
>
> I am using protobuf for a project, and I've run into an interesting case,
> which I've had no luck finding a standard solution to. For the record, I'm
> using the Java APIs to interact with my messages
>
> My project has several messages defined, a few of which have similar
> fields (for example, two of them have a required text field with index 1).
> The problem I'm running into is that if I erroneously pass the byte array
> form of one message to a builder of the other message, it will happily
> parse it without any exceptions or other issues. (Apparently
> InvalidProto....Exception is thrown only is the array is completely invalid
> as a protobuf message of any type, and does not indicate anything else)
>
> I have tried checking "isInitialized", but because they both have the same
> required fields at the same indexes, it doesn't have an error.
>
> I considered changing the indexes or something like that, but that depends
> on every person who works on this project knowing about and respecting that
> convention - which doesn't seem like a sustainable solution. I also thought
> of checking the unknown fields, but one of the reasons I chose protobuf was
> for its forward and backwards compatibility - and I believe that the
> unknown filed list will be (validly) non-empty if I add a field down the
> road and an old version of the project receives a new version of the
> message.
>
> The only other thing I can think to do is to add a field in my messages
> which indicates the message - is this my best option, or am I missing
> something in the standard libraries which handles this?
>
> Thanks!
>
> Example:
>
> message Message1 {
>
> required string field1 = 1;
>
> optional string field2 = 2;
> }
>
> message Message2 {
>
> required string field1 = 1;
>
> optional int32 field2 = 2;
>
> }
>
>
> public void parseMessage1(byte[] protobuf){
> try {
> Message1 message = Messag1e.parseFrom(protobuf);
>
> if(message.isInitialized()){
> //Do some stuff
> }else{
> //Never get here
> }
> } catch (InvalidProtocolBufferException e) {
> //Not thrown
> }
> }
>
--
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 post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.