I've gotten this message for reasons other than the field not being set. make sure that you have the number of bytes on the delimiters set correctly on the C++ side. also, maybe stringProperty should be string Property (two words).
On Oct 22, 9:12 am, locky <true.n...@gmail.com> wrote: > I have a question regarding required string properties and default > values. > > Consider the following message definition. > > message StringTestProto { > required stringProperty = 1; > > } > > I have a C++/Java setup where C++ app is producing a message and a > Java app is consuming it. > > If the stringProperty value is set to an empty string I get the > following exception when trying to parse the > message once I receive it in the the Java app. > > com.google.protobuf.InvalidProtocolBufferException: Message missing > required fields: > > The message is being read as follows: > > StringTestProto proto = StringTestProto.parseFrom(data); > > From what I can see the issue is as follows: > As the stringProperty value is the same as the default (an empty > string) it is not sent over the wire. When the generated Java code > tries to build the proto from a byte[ ] (in the buildFrom method), a > check is done to see if the proto is initialised, this check sees if > the required fields have been set. As the stringProperty was never > sent, the proto does not think it has been set (as it never was) and > therefore the exception is thrown. > > So, how are you supposed to decode a byte[] that contains required > properties, that may have default values? -- 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.