This is something you can do in your own code -- just call your validation function before serializing. If this were to be a "feature" of protocol buffers, then we'd have to store a pointer to your validator function somewhere. Storing it in the message object itself would harm performance and memory usage, but storing it in a static location (such that it applies to all instances of the type) would bring all the myriad problems commonly associated with singletons. So I don't think there's any reasonable way for the protobuf system to provide this.
On Thu, Jul 9, 2009 at 2:14 PM, Rizzuto, Raymond <raymond.rizz...@sig.com>wrote: > I’m going to try that. Since another group builds and packages the > libraries I use, it’ll take a bit to make a private copy with that change. > > > > As an enhancement request, I wish there was a function I could call to > validate the message content before serialize, that would tell me about any > fields of the message that are in error. I.e. so I could catch that issue > similarly to catching uninitialized fields: > > > > if (!m.IsInitialized()) > > { > > std::string error = name + " is missing fields: "; > > std::vector<std::string> errors; > > m.FindInitializationErrors(&errors); > > std::vector<std::string>::const_iterator it; > > for(it = errors.begin(); it!= errors.end(); ++it) > > { > > if (it != errors.begin()) > > error += ", "; > > error += *it; > > } > > throw SPException(error.c_str()); > > } > > > > It might not be something I’d do in production, but it sure would help > during development. > > > ------------------------------ > > *From:* Kenton Varda [mailto:ken...@google.com] > *Sent:* Thursday, July 09, 2009 5:08 PM > > *To:* Rizzuto, Raymond > *Cc:* protobuf@googlegroups.com > *Subject:* Re: intermittent issue with encode (version 2.0.3) > > > > I suppose you could also temporarily edit the header file. > > On Thu, Jul 9, 2009 at 2:05 PM, Rizzuto, Raymond <raymond.rizz...@sig.com> > wrote: > > I’m trying to, without success. Breakpoints in header files, at least > with the version of tools I have, don’t work very well. > > > ------------------------------ > > *From:* Kenton Varda [mailto:ken...@google.com] > *Sent:* Thursday, July 09, 2009 5:02 PM > *To:* Rizzuto, Raymond > *Cc:* protobuf@googlegroups.com > *Subject:* Re: intermittent issue with encode (version 2.0.3) > > > > Run in a debugger and set a breakpoint at wire_format_inl.h:289. > > On Thu, Jul 9, 2009 at 1:56 PM, Rizzuto, Raymond <raymond.rizz...@sig.com> > wrote: > > I think I have an error in my code (C++) that only occurs when I have > multiple threads, and a lot of message volume. Even then, I can run the > same test many times, but only get a failure on some runs. With 7 threads > running on a 4 core machine, and generating 480384 google protocol buffer > messages, I get 33 errors like this to stdout: > > > > libprotobuf ERROR > /siglinux/tc/sles9sp4_gcc-3.3.3_i686/sig1/protobuf-2.0.3/include/google/protobuf/wire_format_inl.h:289] > Encountered string containing invalid UTF-8 data while serializing protocol > buffer. Strings must contain only UTF-8; use the 'bytes' type for raw bytes. > > > > I believe that the data is in error since I get similar errors decoding the > messages: > > > > libprotobuf ERROR > /siglinux/tc/sles9sp4_gcc-3.3.3_i686/sig1/protobuf-2.0.3/include/google/protobuf/wire_format_inl.h:138] > Encountered string containing invalid UTF-8 data while parsing protocol > buffer. Strings must contain only UTF-8; use the 'bytes' type for raw bytes. > > > > Is there any way that I can check for this at run time so that I can print > out more context? I do call IsInitialized before serializing, but that > doesn’t check for this case. > > > > I am running on SLES9SP4, using gcc 3.3.3 as the compiler. > > > > Ray > > > ------------------------------ > > Ray Rizzuto > > raymond.rizz...@sig.com > > Susquehanna International Group > > (610)747-2336 (W) > > (215)776-3780 (C) > > > > > > > ------------------------------ > > IMPORTANT: The information contained in this email and/or its attachments > is confidential. If you are not the intended recipient, please notify the > sender immediately by reply and immediately delete this message and all its > attachments. Any review, use, reproduction, disclosure or dissemination of > this message or any attachment by an unintended recipient is strictly > prohibited. Neither this message nor any attachment is intended as or should > be construed as an offer, solicitation or recommendation to buy or sell any > security or other financial instrument. Neither the sender, his or her > employer nor any of their respective affiliates makes any warranties as to > the completeness or accuracy of any of the information contained herein or > that this message or any of its attachments is free of viruses. > > > > > > > > > ------------------------------ > > IMPORTANT: The information contained in this email and/or its attachments > is confidential. If you are not the intended recipient, please notify the > sender immediately by reply and immediately delete this message and all its > attachments. Any review, use, reproduction, disclosure or dissemination of > this message or any attachment by an unintended recipient is strictly > prohibited. Neither this message nor any attachment is intended as or should > be construed as an offer, solicitation or recommendation to buy or sell any > security or other financial instrument. Neither the sender, his or her > employer nor any of their respective affiliates makes any warranties as to > the completeness or accuracy of any of the information contained herein or > that this message or any of its attachments is free of viruses. > > > > ------------------------------ > IMPORTANT: The information contained in this email and/or its attachments > is confidential. If you are not the intended recipient, please notify the > sender immediately by reply and immediately delete this message and all its > attachments. Any review, use, reproduction, disclosure or dissemination of > this message or any attachment by an unintended recipient is strictly > prohibited. Neither this message nor any attachment is intended as or should > be construed as an offer, solicitation or recommendation to buy or sell any > security or other financial instrument. Neither the sender, his or her > employer nor any of their respective affiliates makes any warranties as to > the completeness or accuracy of any of the information contained herein or > that this message or any of its attachments is free of viruses. > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To post to this group, send email to protobuf@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 -~----------~----~----~----~------~----~------~--~---