--- old/src/java.base/share/classes/java/io/ObjectStreamClass.java 2015-01-06 10:54:42.900868038 +0000 +++ new/src/java.base/share/classes/java/io/ObjectStreamClass.java 2015-01-06 10:54:42.708868044 +0000 @@ -1252,6 +1252,10 @@ fieldRefl.getObjFieldValues(obj, vals); } + void checkObjFieldValueTypes(Object obj, Object[] vals) { + fieldRefl.checkObjectFieldValueTypes(obj, vals); + } + /** * Sets the serializable object fields of object obj using values from * array vals starting at offset 0. It is the responsibility of the caller @@ -2069,6 +2073,10 @@ } } + void checkObjectFieldValueTypes(Object obj, Object[] vals) { + setObjFieldValues(obj, vals, true); + } + /** * Sets the serializable object fields of object obj using values from * array vals starting at offset 0. The caller is responsible for @@ -2077,6 +2085,10 @@ * ClassCastException. */ void setObjFieldValues(Object obj, Object[] vals) { + setObjFieldValues(obj, vals, false); + } + + private void setObjFieldValues(Object obj, Object[] vals, boolean dryRun) { if (obj == null) { throw new NullPointerException(); } @@ -2101,7 +2113,8 @@ f.getType().getName() + " in instance of " + obj.getClass().getName()); } - unsafe.putObject(obj, key, val); + if (!dryRun) + unsafe.putObject(obj, key, val); break; default: