Hi There,

I'm writing a utility to convert data stored in MongoDB back to protocol 
buffer format.  My strategy is to look for each field in the protocol 
buffer definition, and if there's a matching field from my MongoDB object, 
then pull that data and set it on my protocol buffer builder.  This works 
great, except for embedded messages.  I can't figure out how to create a 
Builder for an embedded message.

Here's my first try:

          switch (fieldDescriptor.getJavaType()) {
            ...
            case MESSAGE:
              Class<T> type = (Class<T>) 
fieldDescriptor.getDefaultValue().getClass(); // getDefaultValue throws.
              messageBuilder.addRepeatedField(fieldDescriptor,
                  fromDBObject((BasicBSONObject) object.get(fieldName), 
type));
              break;

But the noted line throws with the error, 
"java.lang.UnsupportedOperationException: FieldDescriptor.getDefaultValue() 
called on an embedded message field."

Here's my second try:
          switch (fieldDescriptor.getJavaType()) {
            ...
            case MESSAGE:
              Message.Builder embeddedMessageBuilder = 
messageBuilder.getFieldBuilder(fieldDescriptor); // getFieldBuilder throws.
              Class<T> type = (Class<T>) 
embeddedMessageBuilder.getDefaultInstanceForType().getClass();
              messageBuilder.addRepeatedField(fieldDescriptor,
                  fromDBObject((BasicBSONObject) object.get(fieldName), 
type));
              break;

Here, the noted line throws with the error, 
"java.lang.UnsupportedOperationException: getFieldBuilder() called on a 
non-Message type."

I'm not sure what else to try.  My question boils down to a very simple 
one: Given a FieldDescriptor that describes an embedded repeated MESSAGE 
field, how can you create a Builder for it?

Thanks!
jon

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