diff --git a/utils/protobuf-schema-utilities/src/main/java/io/apicurio/registry/utils/protobuf/schema/MessageDefinition.java b/utils/protobuf-schema-utilities/src/main/java/io/apicurio/registry/utils/protobuf/schema/MessageDefinition.java index efc70a671a..c8521f7d82 100644 --- a/utils/protobuf-schema-utilities/src/main/java/io/apicurio/registry/utils/protobuf/schema/MessageDefinition.java +++ b/utils/protobuf-schema-utilities/src/main/java/io/apicurio/registry/utils/protobuf/schema/MessageDefinition.java @@ -136,6 +136,11 @@ private void doAddField( // Note: changed if (label != null) { fieldBuilder.setLabel(label); + // If this field is a regular optional field, then force the "optional" keyword in the schema output. + // Ignore if the field is part of a oneOf. + if (oneofBuilder == null && label.equals(DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL)) { + fieldBuilder.setProto3Optional(true); + } } DescriptorProtos.FieldDescriptorProto.Type primType = sTypeMap.get(type); if (primType != null) {