# HG changeset patch # User dfuchs # Date 1363278452 -3600 # Node ID 31c782610044b0f04f981c2b97355804a1c57407 # Parent 87bacc5ee8e430aadd200ae13a2d15fe9c8f4350 8009305: Improve AWT data transfer Reviewed-by: art, skoivu, smarks, ant diff --git openjdk/jdk/src/share/classes/sun/awt/datatransfer/TransferableProxy.java openjdk/jdk/src/share/classes/sun/awt/datatransfer/TransferableProxy.java --- jdk/src/share/classes/sun/awt/datatransfer/TransferableProxy.java +++ jdk/src/share/classes/sun/awt/datatransfer/TransferableProxy.java @@ -102,11 +102,11 @@ public class TransferableProxy implement protected final boolean isLocal; } -class ClassLoaderObjectOutputStream extends ObjectOutputStream { +final class ClassLoaderObjectOutputStream extends ObjectOutputStream { private final Map, ClassLoader> map = new HashMap, ClassLoader>(); - public ClassLoaderObjectOutputStream(OutputStream os) throws IOException { + ClassLoaderObjectOutputStream(OutputStream os) throws IOException { super(os); } @@ -140,15 +140,15 @@ class ClassLoaderObjectOutputStream exte map.put(s, classLoader); } - public Map, ClassLoader> getClassLoaderMap() { + Map, ClassLoader> getClassLoaderMap() { return new HashMap(map); } } -class ClassLoaderObjectInputStream extends ObjectInputStream { +final class ClassLoaderObjectInputStream extends ObjectInputStream { private final Map, ClassLoader> map; - public ClassLoaderObjectInputStream(InputStream is, + ClassLoaderObjectInputStream(InputStream is, Map, ClassLoader> map) throws IOException { super(is); @@ -166,8 +166,11 @@ class ClassLoaderObjectInputStream exten s.add(className); ClassLoader classLoader = map.get(s); - - return Class.forName(className, false, classLoader); + if (classLoader != null) { + return Class.forName(className, false, classLoader); + } else { + return super.resolveClass(classDesc); + } } protected Class resolveProxyClass(String[] interfaces) @@ -179,6 +182,9 @@ class ClassLoaderObjectInputStream exten } ClassLoader classLoader = map.get(s); + if (classLoader == null) { + return super.resolveProxyClass(interfaces); + } // The code below is mostly copied from the superclass. ClassLoader nonPublicLoader = null;