diff --git a/src/main/java/com/github/fge/avro/translators/RecordTranslator.java b/src/main/java/com/github/fge/avro/translators/RecordTranslator.java index 28f470c..9e4a288 100644 --- a/src/main/java/com/github/fge/avro/translators/RecordTranslator.java +++ b/src/main/java/com/github/fge/avro/translators/RecordTranslator.java @@ -96,7 +96,9 @@ protected void doTranslate(final Schema avroSchema, fieldSchema = field.schema(); fieldType = fieldSchema.getType(); translator = AvroTranslators.getTranslator(fieldType); - required.add(fieldName); + if (isRequiredField(field)) { + required.add(fieldName); + } ptr = JsonPointer.of("properties", fieldName); propertyNode = FACTORY.objectNode(); properties.put(fieldName, propertyNode); @@ -107,6 +109,23 @@ protected void doTranslate(final Schema avroSchema, } } + private boolean isRequiredField(Schema.Field field) { + if (field.defaultValue() != null) { + return false; + } + + Schema fieldSchema = field.schema(); + if (fieldSchema.getType() == Schema.Type.UNION) { + for (Schema typeSchema : fieldSchema.getTypes()) { + if (typeSchema.getType() == Schema.Type.NULL) { + return false; + } + } + } + + return true; + } + private static void injectDefault(final ObjectNode propertyNode, final Schema.Field field) {