@Override protected Serializer<GenericRow> getSerializer( final Schema avroSchema, final org.apache.kafka.connect.data.Schema kafkaSchema, final String topicName ) { return new KsqlJsonSerializer(kafkaSchema); } }
@Override public Serde<GenericRow> getGenericRowSerde(final Schema schema, final KsqlConfig ksqlConfig, final boolean isInternal, final Supplier<SchemaRegistryClient> schemaRegistryClientFactory, final String loggerNamePrefix) { final Map<String, Object> serdeProps = new HashMap<>(); serdeProps.put("JsonPOJOClass", GenericRow.class); final Serializer<GenericRow> genericRowSerializer = new KsqlJsonSerializer(schema); genericRowSerializer.configure(serdeProps, false); final Deserializer<GenericRow> genericRowDeserializer = new KsqlJsonDeserializer( schema, isInternal, ProcessingLoggerFactory.getLogger( join(loggerNamePrefix, SerdeUtils.DESERIALIZER_LOGGER_NAME)) ); genericRowDeserializer.configure(serdeProps, false); return Serdes.serdeFrom(genericRowSerializer, genericRowDeserializer); } }
@Test public void shouldSerializeRowCorrectly() { final List columns = Arrays.asList(1511897796092L, 1L, "item_1", 10.0, Arrays.asList(100.0), Collections.singletonMap("key1", 100.0)); final GenericRow genericRow = new GenericRow(columns); final KsqlJsonSerializer ksqlJsonDeserializer = new KsqlJsonSerializer(orderSchema); final byte[] bytes = ksqlJsonDeserializer.serialize("t1", genericRow); final String jsonString = new String(bytes, StandardCharsets.UTF_8); assertThat("Incorrect serialization.", jsonString, equalTo( "{\"ORDERTIME\":1511897796092,\"ORDERID\":1,\"ITEMID\":\"item_1\",\"ORDERUNITS\":10.0,\"ARRAYCOL\":[100.0],\"MAPCOL\":{\"key1\":100.0}}")); }
@Test public void shouldHandleStruct() throws IOException { final KsqlJsonSerializer jsonSerializer = new KsqlJsonSerializer(getSchemaWithStruct()); final GenericRow genericRow = getGenericRow(); final byte[] bytes = jsonSerializer.serialize("", genericRow); final ObjectMapper objectMapper = new ObjectMapper(); final JsonNode jsonNode = objectMapper.readTree(bytes); assertThat(jsonNode.size(), equalTo(7)); assertThat(jsonNode.get("ordertime").asLong(), equalTo(genericRow.getColumns().get(0))); assertThat(jsonNode.get("itemid").get("NAME").asText(), equalTo("Item_10")); }
@Test public void shouldSerializeRowWithNull() { final List columns = Arrays.asList(1511897796092L, 1L, "item_1", 10.0, null, null); final GenericRow genericRow = new GenericRow(columns); final KsqlJsonSerializer ksqlJsonDeserializer = new KsqlJsonSerializer(orderSchema); final byte[] bytes = ksqlJsonDeserializer.serialize("t1", genericRow); final String jsonString = new String(bytes, StandardCharsets.UTF_8); assertThat("Incorrect serialization.", jsonString, equalTo( "{\"ORDERTIME\":1511897796092,\"ORDERID\":1,\"ITEMID\":\"item_1\",\"ORDERUNITS\":10.0,\"ARRAYCOL\":null,\"MAPCOL\":null}")); }