@Test public void testFieldErrorHandlingOnResultSet() throws SQLException, Exception, ParseException { @SuppressWarnings("unchecked") FieldMapperErrorHandler<JdbcColumnKey> fieldMapperErrorHandler = mock(FieldMapperErrorHandler.class); ResultSet rs = mock(ResultSet.class); final Exception exception = new SQLException("Error!"); JdbcMapper<DbObject> mapper = JdbcMapperFactoryHelper.asm() .fieldMapperErrorHandler(fieldMapperErrorHandler) .newBuilder(DbObject.class).addMapping("id").mapper(); when(rs.next()).thenReturn(true, false); when(rs.getLong(1)).thenThrow(exception); List<DbObject> list = mapper.forEach(rs, new ListCollector<DbObject>()).getList(); assertNotNull(list.get(0)); verify(fieldMapperErrorHandler).errorMappingField(eq(new JdbcColumnKey("id", 1)), any(), same(list.get(0)), same(exception), any(Context.class)); }
@Test public void testFieldErrorHandling() throws SQLException, Exception, ParseException { @SuppressWarnings("unchecked") FieldMapperErrorHandler<JdbcColumnKey> fieldMapperErrorHandler = mock(FieldMapperErrorHandler.class); final Exception exception = new Exception("Error!"); JdbcMapper<DbObject> mapper = JdbcMapperFactoryHelper.asm() .fieldMapperErrorHandler(fieldMapperErrorHandler) .addCustomFieldMapper("id", new FieldMapper<ResultSet, DbObject>() { @Override public void mapTo(ResultSet source, DbObject target, MappingContext<? super ResultSet> mappingContext) throws Exception { throw exception; } }).newBuilder(DbObject.class).addMapping("id").mapper(); List<DbObject> list = mapper.forEach(new MockDbObjectResultSet(1), new ListCollector<DbObject>()).getList(); assertNotNull(list.get(0)); verify(fieldMapperErrorHandler).errorMappingField(eq(new JdbcColumnKey("id", 1)), any(), same(list.get(0)), same(exception), any(Context.class)); }
@Test public void setChangeFieldMapperErrorHandler() throws NoSuchMethodException, SecurityException, IOException { JdbcMapperBuilder<DbObject> builder = JdbcMapperFactoryHelper .asm() .fieldMapperErrorHandler(new LogFieldMapperErrorHandler<JdbcColumnKey>()) .newBuilder(DbObject.class); builder.addMapping("id"); }
@Test public void testAsmFactoryJdbcMapperCache() throws Exception { SourceMapper<ResultSet, DbObject> mapper1 = getSubMapper(JdbcMapperFactoryHelper.asm().newBuilder(DbObject.class).addMapping("id").addMapping("name").mapper()); SourceMapper<ResultSet, DbObject> mapper2 = getSubMapper(JdbcMapperFactoryHelper.asm().newBuilder(DbObject.class).addMapping("id").addMapping("name").mapper()); final FieldMapperColumnDefinition<JdbcColumnKey> columnDefinition = FieldMapperColumnDefinition.customGetter(new StaticLongGetter<ResultSet>(3)); SourceMapper<ResultSet, DbObject> mapper3 = getSubMapper( JdbcMapperFactoryHelper.asm().fieldMapperErrorHandler(new LogFieldMapperErrorHandler<JdbcColumnKey>()).newBuilder(DbObject.class).addMapping("id", columnDefinition).addMapping("name") .mapper()); assertNotSame(mapper1, mapper2); assertSame(mapper1.getClass(), mapper2.getClass()); assertNotSame(mapper1.getClass(), mapper3.getClass()); assertTrue(mapper1.getClass().getSimpleName().startsWith("AsmMapperFrom")); assertTrue(mapper2.getClass().getSimpleName().startsWith("AsmMapperFrom")); assertTrue(mapper3.getClass().getSimpleName().startsWith("AsmMapperFrom")); }