-
Bug
-
Resolution: Fixed
-
P4
-
1.4.0, 5.0
-
tiger
-
generic, sparc
-
generic, solaris_2.6
Name: dsR10051 Date: 06/15/2001
Method
java.beans.PersistenceDelegate.mutatesTo(Object oldInstance, Object newInstance)
works incorrectly if the value of oldInstance parameter is null.
In this case it throws undocumented NullPointerException.
It seems the correct behavior for this method is to return false if newInstance
is valid object.
It should be fixed or documented.
Here is minimized test:
import java.beans.*;
public class PersistenceDelegateTest01 {
public static void main(String[] args) {
DummyPersistenceDelegate pd = new DummyPersistenceDelegate();
Object oldInstance = null;
Object newInstance = new Object();
if (pd.mutatesTo(oldInstance, newInstance)) {
System.out.println("FAILED");
} else {
System.out.println("OKAY");
}
}
}
class DummyPersistenceDelegate extends PersistenceDelegate {
public Expression instantiate(Object oldInctance, Encoder out) {
return null;
}
public boolean mutatesTo(Object oldInstance, Object newInstance) {
return super.mutatesTo(oldInstance, newInstance);
}
}
--- Output ---
%java -version
java version "1.4.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta-b65)
Java HotSpot(TM) Client VM (build 1.4.0-beta-b65, mixed mode)
%java PersistenceDelegateTest01
Exception in thread "main" java.lang.NullPointerException
at java.beans.PersistenceDelegate.mutatesTo(PersistenceDelegate.java:130)
at DummyPersistenceDelegate.mutatesTo(PersistenceDelegateTest01.java:25)
at PersistenceDelegateTest01.main(PersistenceDelegateTest01.java:9)
======================================================================
Method
java.beans.PersistenceDelegate.mutatesTo(Object oldInstance, Object newInstance)
works incorrectly if the value of oldInstance parameter is null.
In this case it throws undocumented NullPointerException.
It seems the correct behavior for this method is to return false if newInstance
is valid object.
It should be fixed or documented.
Here is minimized test:
import java.beans.*;
public class PersistenceDelegateTest01 {
public static void main(String[] args) {
DummyPersistenceDelegate pd = new DummyPersistenceDelegate();
Object oldInstance = null;
Object newInstance = new Object();
if (pd.mutatesTo(oldInstance, newInstance)) {
System.out.println("FAILED");
} else {
System.out.println("OKAY");
}
}
}
class DummyPersistenceDelegate extends PersistenceDelegate {
public Expression instantiate(Object oldInctance, Encoder out) {
return null;
}
public boolean mutatesTo(Object oldInstance, Object newInstance) {
return super.mutatesTo(oldInstance, newInstance);
}
}
--- Output ---
%java -version
java version "1.4.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta-b65)
Java HotSpot(TM) Client VM (build 1.4.0-beta-b65, mixed mode)
%java PersistenceDelegateTest01
Exception in thread "main" java.lang.NullPointerException
at java.beans.PersistenceDelegate.mutatesTo(PersistenceDelegate.java:130)
at DummyPersistenceDelegate.mutatesTo(PersistenceDelegateTest01.java:25)
at PersistenceDelegateTest01.main(PersistenceDelegateTest01.java:9)
======================================================================