Hongshun Wang created FLINK-36609:
-------------------------------------
Summary: Protobuf Format not support proto3
Key: FLINK-36609
URL: https://issues.apache.org/jira/browse/FLINK-36609
Project: Flink
Issue Type: Improvement
Components: Formats (JSON, Avro, Parquet, ORC, SequenceFile)
Affects Versions: 1.20.0
Reporter: Hongshun Wang
Fix For: 1.20.1
Attachments: image-2024-10-28-14-11-17-931.png
Currently, though ProtoToRowConverter try to handle PROTO3 as follows:
{code:java}
public ProtoToRowConverter(RowType rowType, PbFormatConfig formatConfig)
throws PbCodegenException {
try {
Descriptors.Descriptor descriptor =
PbFormatUtils.getDescriptor(formatConfig.getMessageClassName());
Class<?> messageClass =
Class.forName(
formatConfig.getMessageClassName(),
true,
Thread.currentThread().getContextClassLoader());
String fullMessageClassName = PbFormatUtils.getFullJavaName(descriptor);
boolean readDefaultValuesForPrimitiveTypes =
formatConfig.isReadDefaultValues();
if (descriptor.getFile().getSyntax() == Syntax.PROTO3) {
// pb3 always read default values for primitive types
readDefaultValuesForPrimitiveTypes = true;
}
//...
} {code}
However, protoc will compile message of PROTO3 as
FileDescriptor rather than Descriptor, thus the following code will throw
exception:
!https://alidocs.dingtalk.com/core/api/resources/img/5eecdaf48460cde59040feb26895f4d9b9874851c547dab758e70b814913bc360a414d3de9277d871abf3af1cbd75249a9fcba3598ff5ae2936e5b530f5e23a6779e2fa1453b2c8d24c0547dfa0c758ff70226a219283534fc653b69905bac42?tmpCode=ada2b509-fde1-48f9-81f7-3a57fefa6367!
{code:java}
public static Descriptors.Descriptor getDescriptor(String className) {
try {
Class<?> pbClass =
Class.forName(className, true,
Thread.currentThread().getContextClassLoader());
return (Descriptors.Descriptor)
pbClass.getMethod(PbConstant.PB_METHOD_GET_DESCRIPTOR).invoke(null);
} catch (Exception e) {
throw new IllegalArgumentException(
String.format("get %s descriptors error!", className), e);
}
} {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)