@Override public Integer convertToAvro(String value) { // String to Byte (datum type), then Byte (datum type to Integer (Avro-compatible types) // Because of migration issue, decode flag is always 'true' for byte type return StringUtils.isEmpty(value) ? null : ParserUtils.parseToByte(ParserUtils.transformNumberString(value, thousandsSepChar, decimalSepChar), true) .intValue(); } }
@Test public void testParseToByte() throws Exception { assertNull(ParserUtils.parseToByte(null, true)); assertEquals(Byte.valueOf("10"), ParserUtils.parseToByte("010", false)); assertEquals(Byte.valueOf("8"), ParserUtils.parseToByte("010", true)); assertEquals(Byte.valueOf("10"), ParserUtils.parseToByte("10", false)); assertEquals(Byte.valueOf("10"), ParserUtils.parseToByte("10", true)); try { ParserUtils.parseToByte("0X10", false); fail("Except get NumberFormatException"); } catch (Exception e) { assertEquals(NumberFormatException.class, e.getClass()); LOG.debug("Except exception:" + e.getMessage()); } assertEquals(Byte.valueOf("16"), ParserUtils.parseToByte("0X10", true)); try { ParserUtils.parseToByte("0X123", true); } catch (Exception e) { assertEquals(NumberFormatException.class, e.getClass()); LOG.debug("Except exception:" + e.getMessage()); } }