Hi,
There is an issue when initialising a class when super class has reference to
sub class
(Cclass extending Bclass extending Aclass and Aclass has a reference to Cclass)
public class Aclass {
private Cclass cclass;
}
public class Bclass extends Aclass {
}
public class Cclass extends Bclass {
}
public class Main {
public static void main(String[] args) throws Exception {
//The following line throws ExceptionInInitializerError caused
by
java.lang.NullPointerException
System.out.println(Class.forName("org.jpox.test.Bclass"));
}
}
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.jpox.test.Aclass.___jdo$loadClass(Aclass.java)
at org.jpox.test.Aclass.__jdoFieldTypesInit(Aclass.java)
at org.jpox.test.Aclass.<clinit>(Aclass.java)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.jpox.test.Main.main(Main.java:6)
Caused by: java.lang.NullPointerException
at org.jpox.test.Bclass.jdoGetManagedFieldCount(Bclass.java)
at org.jpox.test.Cclass.__jdoGetInheritedFieldCount(Cclass.java)
at org.jpox.test.Cclass.<clinit>(Cclass.java)
... 8 more
See for a diagram
http://www.jpox.org/servlet/jira/browse/ENHANCER-58
The issue is due to the implementation of the jdoGetManagedFieldCount
The implementation for topmost classes in the hierarchy:
protected static int jdoGetManagedFieldCount () {
return jdoFieldNames.length;
}
The implementation for subclasses:
protected static int jdoGetManagedFieldCount () {
return <pc-superclass>.jdoGetManagedFieldCount() +
jdoFieldNames.length;
}