1/* 2 * Copyright (c) 1998, 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/* @test 25 * @bug 4093279 26 * @compile DefaultPackage.java 27 * @run main DefaultPackage 28 * @summary Raise InvalidClassException if 1st NonSerializable superclass' no-arg constructor is not accessible. This test verifies default package access. 29 */ 30import java.io.*; 31 32class DefaultPackagePublicConstructor { 33 public DefaultPackagePublicConstructor() { 34 } 35}; 36 37class DefaultPackageProtectedConstructor { 38 protected DefaultPackageProtectedConstructor() { 39 } 40}; 41 42class DefaultPackageDefaultAccessConstructor { 43 DefaultPackageDefaultAccessConstructor() { 44 } 45}; 46 47class DefaultPackagePrivateConstructor { 48 private DefaultPackagePrivateConstructor() { 49 } 50 51 /* need to have at least one protected constructor to extend this class.*/ 52 protected DefaultPackagePrivateConstructor(int i) { 53 } 54}; 55 56class DefaultPublicSerializable 57extends DefaultPackagePublicConstructor implements Serializable 58{ 59 int field1 = 5; 60}; 61 62class DefaultProtectedSerializable 63extends DefaultPackageProtectedConstructor implements Serializable 64{ 65 int field1 = 5; 66}; 67 68class DefaultAccessSerializable 69extends DefaultPackageDefaultAccessConstructor implements Serializable 70{ 71 int field1 = 5; 72}; 73 74class DefaultPrivateSerializable 75extends DefaultPackagePrivateConstructor implements Serializable 76{ 77 int field1 = 5; 78 79 DefaultPrivateSerializable() { 80 super(1); 81 } 82}; 83 84class ExternalizablePublicConstructor implements Externalizable { 85 public ExternalizablePublicConstructor() { 86 } 87 public void writeExternal(ObjectOutput out) throws IOException { 88 } 89 public void readExternal(ObjectInput in) 90 throws IOException, ClassNotFoundException 91 { 92 } 93}; 94 95class ExternalizableProtectedConstructor implements Externalizable { 96 protected ExternalizableProtectedConstructor() { 97 } 98 public void writeExternal(ObjectOutput out) throws IOException { 99 } 100 public void readExternal(ObjectInput in) 101 throws IOException, ClassNotFoundException 102 { 103 } 104}; 105 106class ExternalizableAccessConstructor implements Externalizable { 107 ExternalizableAccessConstructor() { 108 } 109 public void writeExternal(ObjectOutput out) throws IOException { 110 } 111 public void readExternal(ObjectInput in) 112 throws IOException, ClassNotFoundException 113 { 114 } 115}; 116 117class ExternalizablePrivateConstructor implements Externalizable { 118 private ExternalizablePrivateConstructor() { 119 } 120 public ExternalizablePrivateConstructor(int i) { 121 } 122 public void writeExternal(ObjectOutput out) throws IOException { 123 } 124 public void readExternal(ObjectInput in) 125 throws IOException, ClassNotFoundException 126 { 127 } 128}; 129 130 131public class DefaultPackage { 132 public static void main(String args[]) 133 throws IOException, ClassNotFoundException 134 { 135 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 136 ObjectOutputStream out = new ObjectOutputStream(baos); 137 out.writeObject(new DefaultPublicSerializable()); 138 out.writeObject(new DefaultProtectedSerializable()); 139 out.writeObject(new DefaultAccessSerializable()); 140 out.writeObject(new DefaultPrivateSerializable()); 141 142 InputStream is = new ByteArrayInputStream(baos.toByteArray()); 143 ObjectInputStream in = new ObjectInputStream(is); 144 /* (DefaultPublicSerializable) */ in.readObject(); 145 /* (DefaultProtectedSerializable) */ in.readObject(); 146 /* (DefaultAcccessSerializable) */ in.readObject(); 147 try { 148 /* (DefaultPrivateSerializable) */ in.readObject(); 149 throw new Error("Expected InvalidClassException reading DefaultPrivateSerialziable"); 150 } catch (InvalidClassException e) { 151 } 152 in.close(); 153 154 baos.reset(); 155 out = new ObjectOutputStream(baos); 156 out.writeObject(new ExternalizablePublicConstructor()); 157 158 in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); 159 /* (ExternalizablePublicConstructor) */ in.readObject(); 160 in.close(); 161 162 baos.reset(); 163 out = new ObjectOutputStream(baos); 164 out.writeObject(new ExternalizableProtectedConstructor()); 165 166 167 in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); 168 try { 169 /* (ExternalizableProtectedConstructor) */ in.readObject(); 170 throw new Error("Expected InvalidClassException reading ExternalizableProtectedConstructor"); 171 } catch (InvalidClassException e) { 172 } 173 in.close(); 174 175 baos.reset(); 176 out = new ObjectOutputStream(baos); 177 out.writeObject(new ExternalizableAccessConstructor()); 178 179 in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); 180 try { 181 /* (ExternalizableAccessConstructor) */ in.readObject(); 182 throw new Error("Expected InvalidClassException reading ExternalizableAccessConstructor"); 183 } catch (InvalidClassException e) { 184 } 185 in.close(); 186 187 baos.reset(); 188 out = new ObjectOutputStream(baos); 189 out.writeObject(new ExternalizablePrivateConstructor(2)); 190 191 in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); 192 try { 193 /* (ExternalizablePrivateConstructor) */ in.readObject(); 194 throw new Error("Expected InvalidClassException reading ExternalizablePrivateConstructor"); 195 } catch (InvalidClassException e) { 196 } 197 out.close(); 198 in.close(); 199 } 200} 201