Buggy code:
public class JdbcDataSource extends DataSource < Iterator < Map < String , Object > > > { private static final Logger LOG = LoggerFactory . getLogger ( JdbcDataSource . class ) ; protected Callable < Connection > factory ; private long connLastUsed = 0 ; private Connection conn ; private Map < String , Integer > fieldNameVsType = new HashMap < String , Integer > ( ) ; private boolean convertType = false ; private int batchSize = JdbcDataSource . FETCH_SIZE ; private int maxRows = 0 ; @ Override public void init ( Context context , Properties initProps ) { } protected Callable < Connection > createConnectionFactory ( final Context context , final Properties initProps ) { } private void resolveVariables ( Context ctx , Properties initProps ) { } @ Override public Iterator < Map < String , Object > > getData ( String query ) { } private void logError ( String msg , Exception e ) { } private List < String > readFieldNames ( ResultSetMetaData metaData ) throws SQLException { } private class ResultSetIterator { ResultSet resultSet ; Statement stmt = null ; List < String > colNames ; Iterator < Map < String , Object > > rSetIterator ; public ResultSetIterator ( String query ) { } private Iterator < Map < String , Object > > getIterator ( ) { } private Map < String , Object > getARow ( ) { if ( ( resultSet ) == null ) return null ; Map < String , Object > result = new HashMap < String , Object > ( ) ; for ( String colName : colNames ) { try { if ( ! ( convertType ) ) { result . put ( colName , resultSet . getObject ( colName ) ) ; continue ; } Integer type = fieldNameVsType . get ( colName ) ; if ( type == null ) type = Types . VARCHAR ; switch ( type ) { case Types . INTEGER : result . put ( colName , resultSet . getInt ( colName ) ) ; break ; case Types . FLOAT : result . put ( colName , resultSet . getFloat ( colName ) ) ; break ; case Types . BIGINT : result . put ( colName , resultSet . getLong ( colName ) ) ; break ; case Types . DOUBLE : result . put ( colName , resultSet . getDouble ( colName ) ) ; break ; case Types . DATE : <START_BUG> result . put ( colName , resultSet . getDate ( colName ) ) ; <END_BUG> break ; case Types . BOOLEAN : result . put ( colName , resultSet . getBoolean ( colName ) ) ; break ; case Types . BLOB : result . put ( colName , resultSet . getBytes ( colName ) ) ; break ; default : result . put ( colName , resultSet . getString ( colName ) ) ; break ; } } catch ( SQLException e ) { logError ( "Error<seq2seq4repair_space>reading<seq2seq4repair_space>data<seq2seq4repair_space>" , e ) ; DataImportHandlerException . wrapAndThrow ( DataImportHandlerException . SEVERE , e , "Error<seq2seq4repair_space>reading<seq2seq4repair_space>data<seq2seq4repair_space>from<seq2seq4repair_space>database" ) ; } } return result ; } private boolean hasnext ( ) { } private void close ( ) { } } private Connection getConnection ( ) throws Exception { } @ Override protected void finalize ( ) throws Throwable { } private boolean isClosed = false ; @ Override public void close ( ) { } private void closeConnection ( ) { } private static final long CONN_TIME_OUT = 10 * 1000 ; private static final int FETCH_SIZE = 500 ; public static final String URL = "url" ; public static final String JNDI_NAME = "jndiName" ; public static final String DRIVER = "driver" ; public static final String CONVERT_TYPE = "convertType" ; }

Fix:
result . put ( colName , resultSet . getTimestamp ( colName ) ) ;