Shortening to necessary, I have the following code:
public class C_Test extends A_Test {
C_Test() {
super( null );
}
}
public abstract class A_Test {
private final String m_test;
public A_Test( String test ) {
m_test = C_ObjectUtil.defaultIfNull( test, "" );
if( m_test == null ) {
throw new RuntimeException( "it happened again!" );
}
}
}
public class C_ObjectUtil {
public static <T> T defaultIfNull( T object, T defaultObject ) {
return ( object == null ) ? defaultObject : object;
}
}
After reading about 70 MB of data from the DB2 database using JDBC, the call new C_Test()throws an impossible exception. Until this time, the constructor was called more than 100,000 times.
After embedding the method defaultIfNullin the constructor A_Test(this removes generics) everything works without errors!
Environment: Sun JDK 1.7.0_25 64Bit, Linux
Any idea what is going on here?
This is where stacktrace goes. This does not match the version above. An exception is thrown here when called m_test.equals( "null" )in the constructor A_Test.
java.lang.NullPointerException
at com.src.db.attribvisitors.A_AttribVisitorAssignFromResultSet.<init>(A_AttribVisitorAssignFromResultSet.java:54)
at com.src.db.attribvisitors.C_AttribVisitorAssignFromSelectStatement.<init>(C_AttribVisitorAssignFromSelectStatement.java:37)
at com.src.db.attribvisitors.C_AttribVisitorAssignFromSelectStatement.<init>(C_AttribVisitorAssignFromSelectStatement.java:43)
at com.src.framework.db.migration.A_DbTableRow.initFromResultset(A_DbTableRow.java:96)
at com.src.framework.db.migration.helper.C_DbTableProcessor$1.process(C_DbTableProcessor.java:66)
at com.src.db.C_TxSql.query(C_TxSql.java:144)
at com.src.db.C_SqlExecuter$3.execute(C_SqlExecuter.java:142)
at com.src.db.C_SqlExecuter.execute(C_SqlExecuter.java:80)
at com.src.db.C_SqlExecuter.query(C_SqlExecuter.java:138)
at com.src.framework.db.migration.helper.C_DbTableProcessor.processTable(C_DbTableProcessor.java:58)
at com.src.framework.db.migration.helper.C_DbTableProcessor.processTable(C_DbTableProcessor.java:39)
at com.src.tools.C_DbExporter.exportTable(C_DbExporter.java:93)
at com.src.tools.C_DbExporter.exportTables(C_DbExporter.java:77)
at com.src.tools.C_DbExporter.exportTables(C_DbExporter.java:61)
at com.src.tools.C_DbExporterAndImporter.exportTables(C_DbExporterAndImporter.java:95)
at com.src.tools.C_DbExporterAndImporter.doMain(C_DbExporterAndImporter.java:83)
at com.src.common.C_MainUtil.runMain(C_MainUtil.java:150)
at com.src.tools.C_DbExporterAndImporter.main(C_DbExporterAndImporter.java:57)
source
share