diff --git a/ksml-data-avro/src/main/java/io/axual/ksml/data/notation/avro/AvroNotation.java b/ksml-data-avro/src/main/java/io/axual/ksml/data/notation/avro/AvroNotation.java index cf17bc27..ecd46821 100644 --- a/ksml-data-avro/src/main/java/io/axual/ksml/data/notation/avro/AvroNotation.java +++ b/ksml-data-avro/src/main/java/io/axual/ksml/data/notation/avro/AvroNotation.java @@ -20,6 +20,7 @@ * =========================LICENSE_END================================== */ +import com.google.common.collect.ImmutableMap; import io.axual.ksml.data.exception.DataException; import io.axual.ksml.data.exception.ExecutionException; import io.axual.ksml.data.mapper.NativeDataObjectMapper; @@ -40,15 +41,13 @@ public class AvroNotation implements Notation { public static final DataType DEFAULT_TYPE = new StructType(); private static final AvroDataObjectMapper mapper = new AvroDataObjectMapper(); private final NativeDataObjectMapper nativeMapper; - private final Serde keySerde; - private final Serde valueSerde; + private final Map serdeConfigs; + private Serde keySerde; + private Serde valueSerde; public AvroNotation(NativeDataObjectMapper nativeMapper, Map configs) { this.nativeMapper = nativeMapper; - keySerde = new AvroSerde(); - keySerde.configure(configs, true); - valueSerde = new AvroSerde(); - valueSerde.configure(configs, false); + this.serdeConfigs = ImmutableMap.copyOf(configs); } @Override @@ -58,8 +57,18 @@ public String name() { @Override public Serde serde(DataType type, boolean isKey) { - if (type instanceof MapType) return isKey ? keySerde : valueSerde; - throw new DataException("Avro serde not found for data type " + type); + if (!(type instanceof MapType)) throw new DataException("AVRO serde can not be applied to type " + type); + + // Create the serdes only upon request to prevent error messages on missing SR url configs if AVRO is not used + if (keySerde == null) { + keySerde = new AvroSerde(); + keySerde.configure(serdeConfigs, true); + } + if (valueSerde == null) { + valueSerde = new AvroSerde(); + valueSerde.configure(serdeConfigs, false); + } + return isKey ? keySerde : valueSerde; } private class AvroSerde implements Serde { diff --git a/pom.xml b/pom.xml index 6f3223ea..ef526bb2 100644 --- a/pom.xml +++ b/pom.xml @@ -64,7 +64,7 @@ 1.11.3 1.12.0 1.26.2 - 3.6.2 + 3.7.0 7.6.1 23.1.2 23.1.2