@Test public void shouldCreateStructWithNestedObject() { for (Entry<String, BsonValue> entry : val.entrySet()) { converter.addFieldSchema(entry, builder); } Schema finalSchema = builder.build(); Struct struct = new Struct(finalSchema); for (Entry<String, BsonValue> entry : val.entrySet()) { converter.convertRecord(entry, finalSchema, struct); } final GenericData.Record avro = (GenericData.Record)avroData.fromConnectData(finalSchema, struct); assertThat(avro.toString()).isEqualTo( "{\"_id\": 1, " + "\"s1\": {\"s1f1\": \"field1s1\", \"s1f2\": \"field2s1\"}, " + "\"s2\": {\"s2f1\": \"field1s2\", \"s2f2\": {\"in1\": 1}}}"); }
@Override public void write(SinkRecord record) throws IOException { log.trace("Sink record: {}", record.toString()); Object value = avroData.fromConnectData(schema, record.value()); writer.append(value); }
@Override public void write(SinkRecord record) throws IOException { Object value = avroData.fromConnectData(record.valueSchema(), record.value()); writer.write((GenericRecord) value); }
/** * parses the value. * @param schema * @param value * @return */ private Map<String, byte[]> parse(final Schema schema, final Object value) { final Map<String, byte[]> values = new LinkedHashMap<>(); try { Object data = avroData.fromConnectData(schema, value); if (data == null || !(data instanceof GenericRecord)) { return EMPTY_MAP; } final GenericRecord record = (GenericRecord) data; final List<Field> fields = schema.fields(); for (Field field : fields) { final byte[] fieldValue = toValue(record, field); if (fieldValue == null) { continue; } values.put(field.name(), fieldValue); } return values; } catch (Exception ex) { final String errorMsg = String.format("Failed to parse the schema [%s] , value [%s] with ex [%s]" , schema, value, ex.getMessage()); throw new EventParsingException(errorMsg, ex); } }