in jsonschema-kafkaconnect-converter/src/main/java/com/amazonaws/services/schemaregistry/kafkaconnect/jsonschema/JsonSchemaToConnectSchemaConverter.java [66:115]
public Schema toConnectSchema(org.everit.json.schema.Schema jsonSchema,
Boolean required) {
if (jsonSchema == null || NullSchema.INSTANCE.equals(jsonSchema)) {
return null;
}
Schema cached = toConnectSchemaCache.get(jsonSchema);
if (cached != null) {
return cached;
}
final SchemaBuilder builder;
String connectType = (String) jsonSchema.getUnprocessedProperties()
.get(JsonSchemaConverterConstants.CONNECT_TYPE_PROP);
String connectName = (String) jsonSchema.getUnprocessedProperties()
.get(JsonSchemaConverterConstants.CONNECT_NAME_PROP);
TypeConverter typeConverter = typeConverterFactory.get(jsonSchema, connectType);
if (typeConverter != null) {
builder = typeConverter.toConnectSchema(jsonSchema, jsonSchemaDataConfig);
} else if (jsonSchema instanceof CombinedSchema) {
CombinedSchema combinedSchema = (CombinedSchema) jsonSchema;
Collection<org.everit.json.schema.Schema> subSchemas = combinedSchema.getSubschemas();
CombinedSchema.ValidationCriterion criterion = combinedSchema.getCriterion();
boolean hasNullSchema = subSchemas.stream()
.anyMatch(schema -> schema instanceof NullSchema);
boolean isOptionalUnion =
CombinedSchema.ONE_CRITERION.equals(criterion) && subSchemas.size() == 2 && hasNullSchema;
if (isOptionalUnion) {
return buildOptionalUnionSchema(subSchemas);
}
builder = buildNonOptionalUnionSchema(subSchemas, hasNullSchema);
} else if (jsonSchema instanceof ReferenceSchema) {
ReferenceSchema refSchema = (ReferenceSchema) jsonSchema;
return toConnectSchema(refSchema.getReferredSchema(), required);
} else {
throw new DataException("Unsupported schema type " + jsonSchema.getClass()
.getName());
}
populateConnectProperties(builder, jsonSchema, required, connectName);
Schema result = builder.build();
toConnectSchemaCache.put(jsonSchema, result);
return result;
}