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.

Reply via email to