@Override public String getErrorSourceData(@NonNull final ErrorData errorData) { try { return DatatypeConverter.printHexBinary((byte []) errorData.getRawData().getData()); } catch (Exception e) { log.debug("Not able to retrieve Error source data from ErrorData"); return DEFAULT_ERROR_SOURCE_DATA; } }
@Override public String getRowKey(@NonNull final RawData rawdata) { try { return (String) ((AvroPayload) rawdata.getData()).getField(ErrorTableUtil.HADOOP_ROW_KEY); } catch (Exception e) { log.debug("Not able to extract Hadoop_row_key from RawData"); return DEFAULT_ROW_KEY; } }
@Override public String getErrorSourceData(@NonNull final ErrorData errorData) { try { AvroPayload payload = (AvroPayload) errorData.getRawData().getData(); return payload.getData().toString(); } catch (Exception e) { log.debug("Not able to extract Error source data from ErrorData"); return DEFAULT_ERROR_SOURCE_DATA; } }
@Override public String getRowKey(@NonNull final RawData rawdata) { try { return ((HoodieRecord) rawdata.getData()).getKey().getRecordKey(); } catch (Exception e) { log.debug("Not able to extract Hadoop_row_key from RawData"); return DEFAULT_ROW_KEY; } }
@Override public String getErrorSourceData(@NonNull final ErrorData errorData) { try { HoodieRecord<HoodieRecordPayload> payload = (HoodieRecord) errorData.getRawData().getData(); String data = String.format("%s. %s", payload.getKey().toString(), String.format("HoodieRecordPayload %s", payload.getData().toString())); return data; } catch (Exception e) { log.debug("Not able to extract Error source data from ErrorData"); return DEFAULT_ERROR_SOURCE_DATA; } }
@Test public void convertIncorrectSchema() throws Exception { final String badData = "{\"firstName\": \"Eric\", \"lastName\": \"Sayle\", \"address\": {\"line1\": \"1234 Main St\", \"city\": \"The City\", \"zip\": \"MyZip\"}}"; final Configuration conf = new Configuration(); final Schema schema = new Schema.Parser().parse( getClass().getClassLoader().getResourceAsStream("schemas/schemasource/myTestSchema.1.avsc")); final JSONFileSourceDataConverter converter = new JSONFileSourceDataConverter( conf, new KafkaSourceConverterErrorExtractor(), schema); final List<ConverterResult<String, AvroPayload>> results = converter.convert(badData); Assert.assertEquals(1, results.size()); Assert.assertFalse(results.get(0).getSuccessData().isPresent()); Assert.assertTrue(results.get(0).getErrorData().isPresent()); Assert.assertEquals(badData, results.get(0).getErrorData().get().getRawData().getData()); }