NoClassDefFoundErrorTrap.java revision 2362
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * This code is free software; you can redistribute it and/or modify it
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * under the terms of the GNU General Public License version 2 only, as
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * published by the Free Software Foundation.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * This code is distributed in the hope that it will be useful, but WITHOUT
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * version 2 for more details (a copy is included in the LICENSE file that
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * accompanied this code).
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * You should have received a copy of the GNU General Public License version
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * 2 along with this work; if not, write to the Free Software Foundation,
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * or visit www.oracle.com if you need additional information or have any
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * questions.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * @bug 4205440
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * @summary When ObjectInputStream.inputClassDescriptor calls its protected
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * resolveClass, if a NoClassDefFoundError is thrown, that Error should be
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * propagated to the caller, instead of being trapped and transformed into
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * a ClassNotFoundException for the class being resolved.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * @author Peter Jones
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * @build NoClassDefFoundErrorTrap
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * @run main NoClassDefFoundErrorTrap
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin public interface Bar {}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin public static class Foo implements Bar, java.io.Serializable {}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * Test subclass of ObjectInputStream that overrides resolveClass
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * to throw a NoClassDefFoundError if our test class "Foo" is to
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * be resolved.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin public static class TestObjectInputStream extends ObjectInputStream {
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner protected Class resolveClass(ObjectStreamClass desc)
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin System.err.println("\nRegression test for bug 4205440\n");
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * Serialize a Foo instance to a byte array.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz ByteArrayOutputStream bout = new ByteArrayOutputStream();
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin ObjectOutputStream out = new ObjectOutputStream(bout);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * Deserialize the Foo instance using our test subclass of
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * ObjectInputStream that will throw NoClassDefFoundError.
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin ByteArrayInputStream bin = new ByteArrayInputStream(stream);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin ObjectInputStream in = new TestObjectInputStream(bin);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin * The test succeeds if we get the NoClassDefFoundError.
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz System.err.println("TEST PASSED: " + e.toString());
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz throw new RuntimeException("TEST FAILED: " + e.toString());