test/java/io/Serializable/resolveProxyClass/NonPublicInterface.java
Print this page
rev 5551 : 8004928: TEST_BUG: Reduce dependence of CoreLib tests from the AWT subsystem
Summary: the tests were refactored to drop AWT dependence where it was possible.
Reviewed-by: alanb, mchung
*** 20,75 ****
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
! * @bug 4413817
* @summary Verify that ObjectInputStream.resolveProxyClass can properly
* resolve a dynamic proxy class which implements a non-public
* interface not defined in the latest user defined class loader.
*/
import java.io.*;
! import java.lang.reflect.*;
public class NonPublicInterface {
static class Handler implements InvocationHandler, Serializable {
public Object invoke(Object obj, Method meth, Object[] args) {
return null;
}
}
public static void main(String[] args) throws Exception {
! Class nonPublic = null;
! String[] nonPublicInterfaces = new String[] {
! "java.awt.Conditional",
! "java.util.zip.ZipConstants",
! "javax.swing.GraphicsWrapper",
! "javax.swing.JPopupMenu$Popup",
! "javax.swing.JTable$Resizable2",
! "javax.swing.JTable$Resizable3",
! "javax.swing.ToolTipManager$Popup",
! "sun.audio.Format",
! "sun.audio.HaePlayable",
! "sun.tools.agent.StepConstants",
! };
! for (int i = 0; i < nonPublicInterfaces.length; i++) {
! try {
! nonPublic = Class.forName(nonPublicInterfaces[i]);
! break;
! } catch (ClassNotFoundException ex) {
}
- }
- if (nonPublic == null) {
- throw new Error("couldn't find system non-public interface");
- }
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(bout);
oout.writeObject(Proxy.newProxyInstance(nonPublic.getClassLoader(),
! new Class[]{ nonPublic }, new Handler()));
oout.close();
ObjectInputStream oin = new ObjectInputStream(
new ByteArrayInputStream(bout.toByteArray()));
oin.readObject();
}
--- 20,62 ----
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
! * @bug 4413817 8004928
* @summary Verify that ObjectInputStream.resolveProxyClass can properly
* resolve a dynamic proxy class which implements a non-public
* interface not defined in the latest user defined class loader.
*/
import java.io.*;
! import java.lang.reflect.InvocationHandler;
! import java.lang.reflect.Method;
! import java.lang.reflect.Modifier;
! import java.lang.reflect.Proxy;
public class NonPublicInterface {
static class Handler implements InvocationHandler, Serializable {
public Object invoke(Object obj, Method meth, Object[] args) {
return null;
}
}
+ public static final String nonPublicIntrfaceName = "java.util.zip.ZipConstants";
+
public static void main(String[] args) throws Exception {
! Class<?> nonPublic = Class.forName(nonPublicIntrfaceName);
! if (Modifier.isPublic(nonPublic.getModifiers())) {
! throw new Error("Interface " + nonPublicIntrfaceName +
! " is public and need to be changed!");
}
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(bout);
oout.writeObject(Proxy.newProxyInstance(nonPublic.getClassLoader(),
! new Class<?>[]{ nonPublic }, new Handler()));
oout.close();
ObjectInputStream oin = new ObjectInputStream(
new ByteArrayInputStream(bout.toByteArray()));
oin.readObject();
}