diff --git a/src/share/classes/java/beans/Beans.java b/src/share/classes/java/beans/Beans.java
index 2183d224167d640a1b5559f145dd415107ea7cfc..a457fa41805f14470dc9eea859ed3517476b0de0 100644
--- a/src/share/classes/java/beans/Beans.java
+++ b/src/share/classes/java/beans/Beans.java
@@ -42,6 +42,8 @@ import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
import java.io.StreamCorruptedException;
+import java.lang.reflect.Modifier;
+
import java.net.URL;
import java.security.AccessController;
@@ -222,6 +224,10 @@ public class Beans {
throw ex;
}
+ if (!Modifier.isPublic(cl.getModifiers())) {
+ throw new ClassNotFoundException("" + cl + " : no public access");
+ }
+
/*
* Try to instantiate the class.
*/
diff --git a/src/share/classes/java/beans/DefaultPersistenceDelegate.java b/src/share/classes/java/beans/DefaultPersistenceDelegate.java
index 3c6c7c2a3d37530cbcd7708e55dea6fca5ef3d76..6891692c30bbe156c38d5743300ce3ec6dd2e943 100644
--- a/src/share/classes/java/beans/DefaultPersistenceDelegate.java
+++ b/src/share/classes/java/beans/DefaultPersistenceDelegate.java
@@ -221,6 +221,9 @@ public class DefaultPersistenceDelegate extends PersistenceDelegate {
// Write out the properties of this instance.
private void initBean(Class> type, Object oldInstance, Object newInstance, Encoder out) {
for (Field field : type.getFields()) {
+ if (!ReflectUtil.isPackageAccessible(field.getDeclaringClass())) {
+ continue;
+ }
int mod = field.getModifiers();
if (Modifier.isFinal(mod) || Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
continue;
diff --git a/src/share/classes/java/beans/MetaData.java b/src/share/classes/java/beans/MetaData.java
index 61f51d4bb3fac030929d05c24e824fc745fba1c7..d733b6f1eaba66f2e889a8c548157482e510d92b 100644
--- a/src/share/classes/java/beans/MetaData.java
+++ b/src/share/classes/java/beans/MetaData.java
@@ -42,6 +42,7 @@ import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.lang.reflect.InvocationTargetException;
import java.security.AccessController;
@@ -56,7 +57,7 @@ import javax.swing.plaf.ColorUIResource;
import sun.swing.PrintColorUIResource;
-import java.util.Objects;
+import static sun.reflect.misc.ReflectUtil.isPackageAccessible;
/*
* Like the Intropector, the MetaData class
@@ -850,13 +851,15 @@ static final class java_awt_AWTKeyStroke_PersistenceDelegate extends Persistence
static class StaticFieldsPersistenceDelegate extends PersistenceDelegate {
protected void installFields(Encoder out, Class> cls) {
- Field fields[] = cls.getFields();
- for(int i = 0; i < fields.length; i++) {
- Field field = fields[i];
- // Don't install primitives, their identity will not be preserved
- // by wrapping.
- if (Object.class.isAssignableFrom(field.getType())) {
- out.writeExpression(new Expression(field, "get", new Object[]{null}));
+ if (Modifier.isPublic(cls.getModifiers()) && isPackageAccessible(cls)) {
+ Field fields[] = cls.getFields();
+ for(int i = 0; i < fields.length; i++) {
+ Field field = fields[i];
+ // Don't install primitives, their identity will not be preserved
+ // by wrapping.
+ if (Object.class.isAssignableFrom(field.getType())) {
+ out.writeExpression(new Expression(field, "get", new Object[]{null}));
+ }
}
}
}