1 /*
2 * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 4974913
27 * @summary Test that array classes can be found in signatures always
28 * and can be deserialized by the deprecated MBeanServer.deserialize method
29 * @author Eamonn McManus
30 * @run clean ArrayClassTest
31 * @run build ArrayClassTest
32 * @run main ArrayClassTest
33 */
34
35 import java.io.*;
36 import java.lang.reflect.*;
37 import java.net.*;
38 import javax.management.*;
39 import javax.management.loading.*;
40
41 public class ArrayClassTest {
42 public static void main(String[] args) throws Exception {
43 MBeanServer mbs = MBeanServerFactory.createMBeanServer();
44
45 /* If this test isn't loaded by a URLClassLoader we will get
46 a ClassCastException here, which is good because it means
47 this test isn't valid. */
48 URLClassLoader testLoader =
49 (URLClassLoader) ArrayClassTest.class.getClassLoader();
50
51 // Create an MLet that can load the same class names but
52 // will produce different results.
53 ClassLoader loader = new SpyLoader(testLoader.getURLs());
54 ObjectName loaderName = new ObjectName("test:type=SpyLoader");
55 mbs.registerMBean(loader, loaderName);
56
57 ObjectName testName = new ObjectName("test:type=Test");
58 mbs.createMBean(Test.class.getName(), testName, loaderName,
59 new Object[1], new String[] {X[].class.getName()});
60 ClassLoader checkLoader = mbs.getClassLoaderFor(testName);
61 if (checkLoader != loader)
62 throw new AssertionError("Wrong loader: " + checkLoader);
63
64 mbs.invoke(testName, "ignore", new Object[1],
65 new String[] {Y[].class.getName()});
66
67 ByteArrayOutputStream bout = new ByteArrayOutputStream();
68 ObjectOutputStream oout = new ObjectOutputStream(bout);
69 oout.writeObject(new Z[0]);
70 oout.close();
71 byte[] bytes = bout.toByteArray();
72 ObjectInputStream oin = mbs.deserialize(testName, bytes);
73 Object zarray = oin.readObject();
|
1 /*
2 * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 4974913
27 * @summary Test that array classes can be found in signatures always
28 * and can be deserialized by the deprecated MBeanServer.deserialize method
29 * @author Eamonn McManus
30 * @modules java.management
31 * @run clean ArrayClassTest
32 * @run build ArrayClassTest
33 * @run main ArrayClassTest
34 */
35
36 import java.io.*;
37 import java.lang.reflect.*;
38 import java.net.*;
39 import java.nio.file.Paths;
40 import javax.management.*;
41 import javax.management.loading.*;
42
43 public class ArrayClassTest {
44 public static void main(String[] args) throws Exception {
45 MBeanServer mbs = MBeanServerFactory.createMBeanServer();
46
47 String[] cpaths = System.getProperty("test.classes", ".")
48 .split(File.pathSeparator);
49 URL[] urls = new URL[cpaths.length];
50 for (int i=0; i < cpaths.length; i++) {
51 urls[i] = Paths.get(cpaths[i]).toUri().toURL();
52 }
53
54 // Create an MLet that can load the same class names but
55 // will produce different results.
56 ClassLoader loader = new SpyLoader(urls);
57 ObjectName loaderName = new ObjectName("test:type=SpyLoader");
58 mbs.registerMBean(loader, loaderName);
59
60 ObjectName testName = new ObjectName("test:type=Test");
61 mbs.createMBean(Test.class.getName(), testName, loaderName,
62 new Object[1], new String[] {X[].class.getName()});
63 ClassLoader checkLoader = mbs.getClassLoaderFor(testName);
64 if (checkLoader != loader)
65 throw new AssertionError("Wrong loader: " + checkLoader);
66
67 mbs.invoke(testName, "ignore", new Object[1],
68 new String[] {Y[].class.getName()});
69
70 ByteArrayOutputStream bout = new ByteArrayOutputStream();
71 ObjectOutputStream oout = new ObjectOutputStream(bout);
72 oout.writeObject(new Z[0]);
73 oout.close();
74 byte[] bytes = bout.toByteArray();
75 ObjectInputStream oin = mbs.deserialize(testName, bytes);
76 Object zarray = oin.readObject();
|