Skip to content

Instantly share code, notes, and snippets.

@jsjolund
Created September 15, 2020 13:07
Show Gist options
  • Save jsjolund/20da869565325bceecf219c31f36bc0a to your computer and use it in GitHub Desktop.
Save jsjolund/20da869565325bceecf219c31f36bc0a to your computer and use it in GitHub Desktop.
Deserialize Protobuf content using compiled descriptor schema with Groovy
@Grapes([
@Grab(group='com.google.protobuf', module='protobuf-java', version='3.8.0'),
@Grab(group='com.google.protobuf', module='protobuf-java-util', version='3.8.0'),
])
import com.google.protobuf.DescriptorProtos
import com.google.protobuf.Descriptors
import com.google.protobuf.DynamicMessage
import com.google.protobuf.util.JsonFormat
import java.io.FileInputStream
import java.nio.file.Files
import java.nio.file.Paths
byte[] data = Files.readAllBytes(Paths.get("data.bin"))
FileInputStream schema = new FileInputStream('schema.desc')
DescriptorProtos.FileDescriptorSet fds = DescriptorProtos.FileDescriptorSet.parseFrom(schema)
schema.close()
DescriptorProtos.FileDescriptorProto fdp = fds.fileList[0]
Descriptors.FileDescriptor[] deps = new Descriptors.FileDescriptor[0]
Descriptors.FileDescriptor fDesc = Descriptors.FileDescriptor.buildFrom(fdp, deps)
Descriptors.Descriptor desc = fDesc.findMessageTypeByName('WriteRequest')
DynamicMessage message = DynamicMessage.parseFrom(desc, data)
JsonFormat.Printer printer = JsonFormat.printer()
println printer.print(message)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment