Index: main/java/java/beans/DefaultPersistenceDelegate.java =================================================================== --- main/java/java/beans/DefaultPersistenceDelegate.java (revision 450418) +++ main/java/java/beans/DefaultPersistenceDelegate.java (working copy) @@ -51,6 +51,13 @@ protected void initialize(Class type, Object oldInstance, Object newInstance, Encoder out) { + + if (newInstance == null) { + out.getExceptionListener().exceptionThrown( + new NullPointerException(Messages.getString("beans.4A"))); //$NON-NLS-1$ + return; + } + try { PropertyDescriptor[] pds = Introspector.getBeanInfo(type) .getPropertyDescriptors(); Index: main/java/java/beans/PersistenceDelegate.java =================================================================== --- main/java/java/beans/PersistenceDelegate.java (revision 450418) +++ main/java/java/beans/PersistenceDelegate.java (working copy) @@ -20,6 +20,8 @@ */ package java.beans; +import org.apache.harmony.beans.internal.nls.Messages; + /** * @author Maxim V. Berkultsev * @version $Revision: 1.10.6.3 $ @@ -38,6 +40,12 @@ */ protected void initialize( Class type, Object oldInstance, Object newInstance, Encoder out) { + + if (type == null) { + throw new NullPointerException( + Messages.getString("beans.4B")); //$NON-NLS-1$ + } + if ((out != null) && (type != null)) { PersistenceDelegate pd = out.getPersistenceDelegate( type.getSuperclass()); @@ -84,10 +92,8 @@ if (newInstance != null) { out.remove(newInstance); } - + out.writeExpression(instantiate(oldInstance, out)); - newInstance = out.get(oldInstance); - initialize(oldInstance.getClass(), oldInstance, newInstance, out); } } } Index: main/java/org/apache/harmony/beans/internal/nls/messages.properties =================================================================== --- main/java/org/apache/harmony/beans/internal/nls/messages.properties (revision 450418) +++ main/java/org/apache/harmony/beans/internal/nls/messages.properties (working copy) @@ -88,3 +88,6 @@ beans.47=Unable to instantiate property editor beans.48=Property editor is not assignable from the PropertyEditor interface beans.49=Child cannot implement both BeanContextChild and BeanContextProxy +beans.4A=newInstance is null +beans.4B=type is null + Index: main/java/org/apache/harmony/beans/ObjectNode.java =================================================================== --- main/java/org/apache/harmony/beans/ObjectNode.java (revision 450418) +++ main/java/org/apache/harmony/beans/ObjectNode.java (working copy) @@ -64,30 +64,31 @@ } public Object getObjectValue() throws Exception { - if(objectValue != null) { - return objectValue; - } - - if(nodes != null) { - Object[] oldArgs = initializer.getArguments(); - Object[] newArgs = new Object[oldArgs.length]; - - for(int i = 0; i < oldArgs.length; ++i) { - if(oldArgs[i] != null) { - ObjectNode node = nodes.get(oldArgs[i]); - - newArgs[i] = node.getObjectValue(); - } else { - newArgs[i] = null; - } - } - - objectValue = (new Expression(initializer.getTarget(), - initializer.getMethodName(), newArgs)).getValue(); - } else { + if (objectValue == null) { objectValue = initializer.getValue(); } + // XXX We probably don't need this. Investigate. +// if(nodes != null) { +// Object[] oldArgs = initializer.getArguments(); +// Object[] newArgs = new Object[oldArgs.length]; +// +// for(int i = 0; i < oldArgs.length; ++i) { +// if(oldArgs[i] != null) { +// ObjectNode node = nodes.get(oldArgs[i]); +// +// newArgs[i] = node.getObjectValue(); +// } else { +// newArgs[i] = null; +// } +// } +// +// objectValue = (new Expression(initializer.getTarget(), +// initializer.getMethodName(), newArgs)).getValue(); +// } else { +// objectValue = initializer.getValue(); +// } + return objectValue; }