I have lib class Dimension3D which contains 3 fields and I want to convert it as one avro filed.
My definition of logical type connected classes: public class Dim3AvroLogicalType { public static final String LOGICAL_TYPE_NAME = "dim3"; public static class Dim3LogicalType extends LogicalType { Dim3LogicalType() { super(LOGICAL_TYPE_NAME); } @Override public void validate(Schema schema) { super.validate(schema); if (schema.getType() != Schema.Type.MAP) { throw new IllegalArgumentException( String.format("Logical type '%s' must be backed by Map", LOGICAL_TYPE_NAME)); } } } public static class Dim3Factory implements LogicalTypes.LogicalTypeFactory { @Override public LogicalType fromSchema(Schema schema) { return new Dim3LogicalType(); } @Override public String getTypeName() { return LOGICAL_TYPE_NAME; } } public static class Dim3Conversion extends Conversion<Dimension3D> { @Override public Class<Dimension3D> getConvertedType() { return Dimension3D.class; } @Override public String getLogicalTypeName() { return LOGICAL_TYPE_NAME; } @Override public Dimension3D fromMap(Map<?, ?> value, Schema schema, LogicalType type) { return Dimension3D.of( Length.of(new BigDecimal(value.get("length").toString())), Length.of(new BigDecimal(value.get("width").toString())), Length.of(new BigDecimal(value.get("height").toString())) ); } @Override public Map<?, ?> toMap(Dimension3D dimension3D, Schema schema, LogicalType type) { return Map.of( "length", dimension3D.getLength().toDecimal().toString(), "width", dimension3D.getWidth().toDecimal().toString(), "height", dimension3D.getHeight().toDecimal().toString() ); } } } interesting part of avro definition: { "name": "dimension", "type": { "type": "map", "logicalType": "dim3", "values": "string" } } after executing maven task I got: public java.util.Map<java.lang.String,java.lang.String> getDimension(). Moreover there is no proper converter added to MODEL$ while other converters are added correctly. I'm using: <plugin> <groupId>org.apache.avro</groupId> <artifactId>avro-maven-plugin</artifactId> <version>1.11.3</version> proper customLogicalTypeFactory & customConversion are added into configuration. How to properly use logical type with map backing type?