< prev index next >
test/java/io/Serializable/packageAccess/PackageAccessTest.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 20,47 ****
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @bug 4765255
* @summary Verify proper functioning of package equality checks used to
* determine accessibility of superclass constructor and inherited
* writeReplace/readResolve methods.
*/
! import java.io.*;
! import java.net.*;
! public class Test {
static Class bcl;
static Class dcl;
public static void main(String[] args) throws Exception {
! ClassLoader ldr =
new URLClassLoader(new URL[]{ new URL("file:foo.jar") },
! Test.class.getClassLoader());
bcl = Class.forName("B", true, ldr);
dcl = Class.forName("D", true, ldr);
Object b = bcl.newInstance();
try {
--- 20,64 ----
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
+ * @test
* @bug 4765255
+ * @library /lib/testlibrary
+ * @build JarUtils A B C D PackageAccessTest
+ * @run main PackageAccessTest
* @summary Verify proper functioning of package equality checks used to
* determine accessibility of superclass constructor and inherited
* writeReplace/readResolve methods.
*/
! import java.io.ByteArrayInputStream;
! import java.io.ByteArrayOutputStream;
! import java.io.InputStream;
! import java.io.IOException;
! import java.io.ObjectInputStream;
! import java.io.ObjectOutputStream;
! import java.io.ObjectStreamClass;
! import java.io.InvalidClassException;
! import java.net.URL;
! import java.net.URLClassLoader;
! import java.nio.file.Files;
! import java.nio.file.Path;
! import java.nio.file.Paths;
! public class PackageAccessTest {
static Class bcl;
static Class dcl;
public static void main(String[] args) throws Exception {
! setup();
!
! URLClassLoader ldr =
new URLClassLoader(new URL[]{ new URL("file:foo.jar") },
! PackageAccessTest.class.getClassLoader());
bcl = Class.forName("B", true, ldr);
dcl = Class.forName("D", true, ldr);
Object b = bcl.newInstance();
try {
*** 55,64 ****
--- 72,82 ----
throw new Error("package private constructor of A invoked");
}
Object d = dcl.newInstance();
swizzle(d);
+ ldr.close();
}
static void swizzle(Object obj) throws Exception {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(bout);
*** 66,75 ****
--- 84,101 ----
oout.close();
ByteArrayInputStream bin =
new ByteArrayInputStream(bout.toByteArray());
new TestObjectInputStream(bin).readObject();
}
+
+ static void setup() throws Exception {
+ Path classes = Paths.get(System.getProperty("test.classes", ""));
+ JarUtils.createJarFile(Paths.get("foo.jar"), classes,
+ classes.resolve("B.class"), classes.resolve("D.class"));
+ Files.delete(classes.resolve("B.class"));
+ Files.delete(classes.resolve("D.class"));
+ }
}
class TestObjectInputStream extends ObjectInputStream {
TestObjectInputStream(InputStream in) throws IOException {
super(in);
*** 78,90 ****
protected Class resolveClass(ObjectStreamClass desc)
throws IOException, ClassNotFoundException
{
String n = desc.getName();
if (n.equals("B")) {
! return Test.bcl;
} else if (n.equals("D")) {
! return Test.dcl;
} else {
return super.resolveClass(desc);
}
}
}
--- 104,116 ----
protected Class resolveClass(ObjectStreamClass desc)
throws IOException, ClassNotFoundException
{
String n = desc.getName();
if (n.equals("B")) {
! return PackageAccessTest.bcl;
} else if (n.equals("D")) {
! return PackageAccessTest.dcl;
} else {
return super.resolveClass(desc);
}
}
}
< prev index next >