Google Protobuf is an stand out project with mixed quality documentation. A corporate cynic points working with DynamicMessage, an interesting Protobuf feature lacking official documentation beyond skeletal javadoc and a short blurb.
The key trick condenses down to:
public static Descriptor descriptorFor(
final InputStream in, final String name)
throws IOException, DescriptorValidationException {
final FileDescriptorSet fileDescriptorSet
= FileDescriptorSet.parseFrom(in);
final FileDescriptorProto fileDescriptorProto
= fileDescriptorSet.getFile(0);
final FileDescriptor fileDescriptor = FileDescriptor.
buildFrom(fileDescriptorProto, new FileDescriptor[0]);
return fileDescriptor.findMessageTypeByName(name);
}
// Elsewhere
final InputStream in = Class.class.
getResourceAsStream("... your descriptors from protoc ...");
final Descriptor descriptor = descriptorFor(in,
Outer.getDescriptor().getName());
final DynamicMessage dynamicMessage = DynamicMessage.
parseFrom(descriptor, outer.toByteArray());
System.out.println("dynamicMessage = " + dynamicMessage); Note the baked-in assumption of "getFile(0)", etc. The cynic's example is more forthcoming. Caveat coder.
No comments:
Post a Comment