Hi,
On Fri, Feb 2, 2024 at 11:37 AM Dupa Trianko <dupa.tria...@gmail.com> wrote: > 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> > Did you register your custom factory and conversion ? See https://github.com/apache/avro/blob/d143d6262f7d6c688e695d1656f8609605835604/lang/java/integration-test/codegen-test/pom.xml#L60-L69 > > proper customLogicalTypeFactory & customConversion are added into > configuration. > > How to properly use logical type with map backing type? >