Hi,
I am trying to build a generic deserializer in Java. We have defined several
GPB messages, and the receiver is receiving them, not knowing what kind of
message it is. I take the serialized bytes and use
DynamicMessage.parseFrom(descriptor, bytes) (I have the descriptor).
I then take this DynamicMessage and am trying to build a GeneratedMessage from
it. The function below demonstrates how I am doing this:
public Message getGeneratedMessage(DynamicMessage msg,
GeneratedMessage.Builder builder) {
Descriptor desc = msg.getDescriptorForType();
System.out.println("Received a DynamicMessage with descriptor =
" + desc.getFullName());
System.out.println("Received GeneratedMessage.Builder with
descriptor = " + builder.getDescriptorForType().getFullName());
if
(!msg.getDescriptorForType().equals(descriptorMap.get(builder.getDescriptorForType().getFullName())))
{
throw new IllegalArgumentException("Msg was of type " +
msg.getDescriptorForType().getFullName() + "; expected type " +
builder.getDescriptorForType().getFullName());
}
builder.mergeFrom(msg);
return builder.build();
}
The program output is showing:
Received a DynamicMessage with descriptor = gpb.SRI
Received GeneratedMessage.Builder with descriptor = gpb.SRI
However..., the mergeFrom method call actually throws the following exception:
java.lang.IllegalArgumentException: mergeFrom(Message) can only merge messages
of the same type.
at
com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:256)
I'm wondering if anybody has any clues. The function that I am using to get
the generated message from the serialized byte array is:
public DynamicMessage parsePacket(final String name, final String description,
byte[] data) throws InvalidProtocolBufferException, IllegalStateException {
Descriptor descriptor = descriptorMap.get(description);
DynamicMessage msg = null;
if (descriptor != null) {
msg = DynamicMessage.parseFrom(descriptor, data);
return msg;
}
else {
throw new IllegalStateException("Description does not
match any known ProtocolBuffer class types!");
}
}
Thanks in advance.
--
You received this message because you are subscribed to the Google Groups
"Protocol Buffers" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/protobuf/-/jofnQihGNLgJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/protobuf?hl=en.