1 /* 2 * Copyright (c) 2000, 2012, 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 import java.io.*; 25 26 /** 27 * @test 28 * @bug 4385429 8004928 29 * @summary Certain legacy chained exceptions throw IllegalArgumentException 30 * upon deserialization if "causative exception" is null. 31 * @author Josh Bloch 32 */ 33 public class LegacyChainedExceptionSerialization { 34 private static Throwable[] broken = { 35 new ClassNotFoundException(), 36 new ExceptionInInitializerError(), 37 new java.lang.reflect.UndeclaredThrowableException(null), 38 new java.lang.reflect.InvocationTargetException(null), 39 new java.security.PrivilegedActionException(null) 40 }; 41 42 public static void main(String[] args) throws Exception { 43 for (int i=0; i<broken.length; i++) 44 test(broken[i]); 45 } 46 47 private static void test(Throwable e) throws Exception { 48 ByteArrayOutputStream bout = new ByteArrayOutputStream(); 49 ObjectOutputStream out = new ObjectOutputStream(bout); 50 out.writeObject(e); 51 out.flush(); 52 53 ByteArrayInputStream bin = 54 new ByteArrayInputStream(bout.toByteArray()); 55 ObjectInputStream in = new ObjectInputStream(bin); 56 Throwable clone = (Throwable) in.readObject(); 57 } 58 } | 1 /* 2 * Copyright (c) 2000, 2018, 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 import java.io.*; 25 import java.lang.reflect.InvocationTargetException; 26 import java.lang.reflect.UndeclaredThrowableException; 27 import java.security.PrivilegedActionException; 28 import java.util.Base64; 29 import java.util.Map; 30 31 /** 32 * @test 33 * @bug 4385429 8004928 8210721 34 * @summary Certain legacy chained exceptions throw IllegalArgumentException 35 * upon deserialization if "causative exception" is null. 36 * @author Josh Bloch 37 */ 38 public class LegacyChainedExceptionSerialization { 39 private static Throwable[] broken = { 40 new ClassNotFoundException(), 41 new ClassNotFoundException("bar", new IOException("reading class file")), 42 new ExceptionInInitializerError(), 43 new ExceptionInInitializerError(new NullPointerException("foo")), 44 new java.lang.reflect.UndeclaredThrowableException(null), 45 new java.lang.reflect.UndeclaredThrowableException(new IllegalArgumentException("foo")), 46 new java.lang.reflect.InvocationTargetException(null), 47 new java.lang.reflect.InvocationTargetException(new Error("goo")), 48 new java.security.PrivilegedActionException(null), 49 new java.security.PrivilegedActionException(new IOException("foo")), 50 }; 51 52 53 public static void main(String[] args) throws Exception { 54 for (int i=0; i<broken.length; i++) 55 test(broken[i]); 56 57 for (Map.Entry<String, Throwable> e : SERIALIZED_DATA.entrySet()) { 58 Throwable t = deserialize(e.getKey()); 59 verify(t, e.getValue()); 60 } 61 62 testOverriddenGetCause(); 63 } 64 65 private static Throwable test(Throwable e) throws Exception { 66 ByteArrayOutputStream bout = new ByteArrayOutputStream(); 67 ObjectOutputStream out = new ObjectOutputStream(bout); 68 out.writeObject(e); 69 out.flush(); 70 71 ByteArrayInputStream bin = 72 new ByteArrayInputStream(bout.toByteArray()); 73 ObjectInputStream in = new ObjectInputStream(bin); 74 Throwable clone = (Throwable) in.readObject(); 75 return clone; 76 } 77 78 private static void testOverriddenGetCause() throws Exception { 79 SubClass sc = new SubClass(new NullPointerException()); 80 SubClass clone = (SubClass)test(sc); 81 Throwable cause = clone.getException(); 82 if (!(cause instanceof NullPointerException) || cause.getMessage() != null) { 83 throw new RuntimeException("unexpected cause: " + cause); 84 } 85 86 } 87 88 private static Throwable deserialize(String ser) throws Exception { 89 Base64.Decoder decoder = Base64.getDecoder(); 90 try (ByteArrayInputStream bin = new ByteArrayInputStream(decoder.decode(ser)); 91 ObjectInputStream ois = new ObjectInputStream(bin)) { 92 return (Throwable)ois.readObject(); 93 } 94 } 95 96 /* 97 * Verify the deserialization of the serialized data from an old version. 98 * See SERIALIZED_DATA. 99 */ 100 private static void verify(Throwable t, Throwable expected) { 101 String msg = expected.getMessage(); 102 Throwable cause = expected.getCause(); 103 if (t.getMessage() != msg && msg != null && !msg.equals(t.getMessage())) { 104 throw new RuntimeException("unexpected message: " + t.getMessage() 105 + " expected: " + msg); 106 } 107 Throwable e = t.getCause(); 108 if (e.getClass() != cause.getClass()) { 109 throw new RuntimeException("unexpected cause: " + t.getCause()); 110 } 111 String causedBy = cause.getMessage(); 112 if (e.getMessage() != causedBy) { 113 if (e.getMessage() == null || causedBy == null || !causedBy.equals(e.getMessage())) { 114 throw new RuntimeException("unexpected message: " + t.getMessage() 115 + " expected: " + causedBy); 116 } 117 } 118 Throwable exception = null; 119 if (t instanceof ExceptionInInitializerError) { 120 exception = ((ExceptionInInitializerError)t).getException(); 121 } else if (t instanceof ClassNotFoundException) { 122 exception = ((ClassNotFoundException)t).getException(); 123 } else if (t instanceof InvocationTargetException) { 124 exception = ((InvocationTargetException) t).getTargetException(); 125 } else if (t instanceof UndeclaredThrowableException) { 126 exception = ((UndeclaredThrowableException) t).getUndeclaredThrowable(); 127 } else if (t instanceof PrivilegedActionException) { 128 exception = ((PrivilegedActionException) t).getException(); 129 } else { 130 // skip the cause == exception check below 131 e = null; 132 } 133 if (e != exception) { 134 throw new RuntimeException("unexpected exception: " + exception); 135 } 136 } 137 138 static class SubClass extends ExceptionInInitializerError { 139 public SubClass(Throwable t) { 140 super(t); 141 } 142 @Override 143 public Throwable getCause() { 144 return new Throwable("always new"); 145 } 146 } 147 148 /* 149 * The following strings are base64-encoded serialized data generated 150 * by running the jdk10SerializeThrowable method with JDK 10 runtime. 151 * 152 * private static void jdk10SerializeThrowable(Throwable e) throws Exception { 153 * Base64.Encoder encoder = Base64.getEncoder(); 154 * try (ByteArrayOutputStream os = new ByteArrayOutputStream(); 155 * ObjectOutputStream out = new ObjectOutputStream(os)) { 156 * out.writeObject(e); 157 * out.flush(); 158 * String s = encoder.encodeToString(os.toByteArray()); 159 * for (int i=0; i < s.length();) { 160 * int end = Math.min(i+60, s.length()); 161 * CharSequence seq = s.subSequence(i, end); 162 * System.out.format("\"%s\" +%n", seq); 163 * i = end; 164 * } 165 * } 166 * } 167 */ 168 169 private static final String EIIE_OLD_VERSION = 170 "rO0ABXNyACVqYXZhLmxhbmcuRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9y" + 171 "FR400Amhk4ACAAFMAAlleGNlcHRpb250ABVMamF2YS9sYW5nL1Rocm93YWJs" + 172 "ZTt4cgAWamF2YS5sYW5nLkxpbmthZ2VFcnJvcjGtS1U0qEq6AgAAeHIAD2ph" + 173 "dmEubGFuZy5FcnJvckUdNlaLgg5WAgAAeHIAE2phdmEubGFuZy5UaHJvd2Fi" + 174 "bGXVxjUnOXe4ywMABEwABWNhdXNlcQB+AAFMAA1kZXRhaWxNZXNzYWdldAAS" + 175 "TGphdmEvbGFuZy9TdHJpbmc7WwAKc3RhY2tUcmFjZXQAHltMamF2YS9sYW5n" + 176 "L1N0YWNrVHJhY2VFbGVtZW50O0wAFHN1cHByZXNzZWRFeGNlcHRpb25zdAAQ" + 177 "TGphdmEvdXRpbC9MaXN0O3hwcHB1cgAeW0xqYXZhLmxhbmcuU3RhY2tUcmFj" + 178 "ZUVsZW1lbnQ7AkYqPDz9IjkCAAB4cAAAAAFzcgAbamF2YS5sYW5nLlN0YWNr" + 179 "VHJhY2VFbGVtZW50YQnFmiY23YUCAAhCAAZmb3JtYXRJAApsaW5lTnVtYmVy" + 180 "TAAPY2xhc3NMb2FkZXJOYW1lcQB+AAVMAA5kZWNsYXJpbmdDbGFzc3EAfgAF" + 181 "TAAIZmlsZU5hbWVxAH4ABUwACm1ldGhvZE5hbWVxAH4ABUwACm1vZHVsZU5h" + 182 "bWVxAH4ABUwADW1vZHVsZVZlcnNpb25xAH4ABXhwAQAAAAd0AANhcHB0AARU" + 183 "ZXN0dAAJVGVzdC5qYXZhdAAEbWFpbnBwc3IAH2phdmEudXRpbC5Db2xsZWN0" + 184 "aW9ucyRFbXB0eUxpc3R6uBe0PKee3gIAAHhweHNyAB5qYXZhLmxhbmcuTnVs" + 185 "bFBvaW50ZXJFeGNlcHRpb25HpaGO/zHhuAIAAHhyABpqYXZhLmxhbmcuUnVu" + 186 "dGltZUV4Y2VwdGlvbp5fBkcKNIPlAgAAeHIAE2phdmEubGFuZy5FeGNlcHRp" + 187 "b27Q/R8+GjscxAIAAHhxAH4ABHEAfgAWdAADZm9vdXEAfgAJAAAAAXNxAH4A" + 188 "CwEAAAAHcQB+AA1xAH4ADnEAfgAPcQB+ABBwcHEAfgASeA=="; 189 190 private static final String CNFE_OLD_VERSION = 191 "rO0ABXNyACBqYXZhLmxhbmcuQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbn9azWY+" + 192 "1CCOAgABTAACZXh0ABVMamF2YS9sYW5nL1Rocm93YWJsZTt4cgAmamF2YS5s" + 193 "YW5nLlJlZmxlY3RpdmVPcGVyYXRpb25FeGNlcHRpb24AAAAAB1vNFQIAAHhy" + 194 "ABNqYXZhLmxhbmcuRXhjZXB0aW9u0P0fPho7HMQCAAB4cgATamF2YS5sYW5n" + 195 "LlRocm93YWJsZdXGNSc5d7jLAwAETAAFY2F1c2VxAH4AAUwADWRldGFpbE1l" + 196 "c3NhZ2V0ABJMamF2YS9sYW5nL1N0cmluZztbAApzdGFja1RyYWNldAAeW0xq" + 197 "YXZhL2xhbmcvU3RhY2tUcmFjZUVsZW1lbnQ7TAAUc3VwcHJlc3NlZEV4Y2Vw" + 198 "dGlvbnN0ABBMamF2YS91dGlsL0xpc3Q7eHBwdAADYmFydXIAHltMamF2YS5s" + 199 "YW5nLlN0YWNrVHJhY2VFbGVtZW50OwJGKjw8/SI5AgAAeHAAAAABc3IAG2ph" + 200 "dmEubGFuZy5TdGFja1RyYWNlRWxlbWVudGEJxZomNt2FAgAIQgAGZm9ybWF0" + 201 "SQAKbGluZU51bWJlckwAD2NsYXNzTG9hZGVyTmFtZXEAfgAFTAAOZGVjbGFy" + 202 "aW5nQ2xhc3NxAH4ABUwACGZpbGVOYW1lcQB+AAVMAAptZXRob2ROYW1lcQB+" + 203 "AAVMAAptb2R1bGVOYW1lcQB+AAVMAA1tb2R1bGVWZXJzaW9ucQB+AAV4cAEA" + 204 "AAAMdAADYXBwdAAEVGVzdHQACVRlc3QuamF2YXQABG1haW5wcHNyAB9qYXZh" + 205 "LnV0aWwuQ29sbGVjdGlvbnMkRW1wdHlMaXN0ergXtDynnt4CAAB4cHhzcgAT" + 206 "amF2YS5pby5JT0V4Y2VwdGlvbmyAc2RlJfCrAgAAeHEAfgADcQB+ABV0ABJy" + 207 "ZWFkaW5nIGNsYXNzIGZpbGV1cQB+AAoAAAABc3EAfgAMAQAAAAxxAH4ADnEA" + 208 "fgAPcQB+ABBxAH4AEXBwcQB+ABN4"; 209 210 private static final String ITE1_OLD_VERSION = 211 "rO0ABXNyACtqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhj" + 212 "ZXB0aW9uOLEmjtZxJG8CAAFMAAZ0YXJnZXR0ABVMamF2YS9sYW5nL1Rocm93" + 213 "YWJsZTt4cgAmamF2YS5sYW5nLlJlZmxlY3RpdmVPcGVyYXRpb25FeGNlcHRp" + 214 "b24AAAAAB1vNFQIAAHhyABNqYXZhLmxhbmcuRXhjZXB0aW9u0P0fPho7HMQC" + 215 "AAB4cgATamF2YS5sYW5nLlRocm93YWJsZdXGNSc5d7jLAwAETAAFY2F1c2Vx" + 216 "AH4AAUwADWRldGFpbE1lc3NhZ2V0ABJMamF2YS9sYW5nL1N0cmluZztbAApz" + 217 "dGFja1RyYWNldAAeW0xqYXZhL2xhbmcvU3RhY2tUcmFjZUVsZW1lbnQ7TAAU" + 218 "c3VwcHJlc3NlZEV4Y2VwdGlvbnN0ABBMamF2YS91dGlsL0xpc3Q7eHBwdAAD" + 219 "YmFydXIAHltMamF2YS5sYW5nLlN0YWNrVHJhY2VFbGVtZW50OwJGKjw8/SI5" + 220 "AgAAeHAAAAABc3IAG2phdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudGEJxZom" + 221 "Nt2FAgAIQgAGZm9ybWF0SQAKbGluZU51bWJlckwAD2NsYXNzTG9hZGVyTmFt" + 222 "ZXEAfgAFTAAOZGVjbGFyaW5nQ2xhc3NxAH4ABUwACGZpbGVOYW1lcQB+AAVM" + 223 "AAptZXRob2ROYW1lcQB+AAVMAAptb2R1bGVOYW1lcQB+AAVMAA1tb2R1bGVW" + 224 "ZXJzaW9ucQB+AAV4cAEAAAARdAADYXBwdAAEVGVzdHQACVRlc3QuamF2YXQA" + 225 "BG1haW5wcHNyAB9qYXZhLnV0aWwuQ29sbGVjdGlvbnMkRW1wdHlMaXN0ergX" + 226 "tDynnt4CAAB4cHhzcgAPamF2YS5sYW5nLkVycm9yRR02VouCDlYCAAB4cQB+" + 227 "AARxAH4AFXQAA2Zvb3VxAH4ACgAAAAFzcQB+AAwBAAAAEXEAfgAOcQB+AA9x" + 228 "AH4AEHEAfgARcHBxAH4AE3g="; 229 230 private static final String ITE2_OLD_VERSION = 231 "rO0ABXNyACtqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhj" + 232 "ZXB0aW9uOLEmjtZxJG8CAAFMAAZ0YXJnZXR0ABVMamF2YS9sYW5nL1Rocm93" + 233 "YWJsZTt4cgAmamF2YS5sYW5nLlJlZmxlY3RpdmVPcGVyYXRpb25FeGNlcHRp" + 234 "b24AAAAAB1vNFQIAAHhyABNqYXZhLmxhbmcuRXhjZXB0aW9u0P0fPho7HMQC" + 235 "AAB4cgATamF2YS5sYW5nLlRocm93YWJsZdXGNSc5d7jLAwAETAAFY2F1c2Vx" + 236 "AH4AAUwADWRldGFpbE1lc3NhZ2V0ABJMamF2YS9sYW5nL1N0cmluZztbAApz" + 237 "dGFja1RyYWNldAAeW0xqYXZhL2xhbmcvU3RhY2tUcmFjZUVsZW1lbnQ7TAAU" + 238 "c3VwcHJlc3NlZEV4Y2VwdGlvbnN0ABBMamF2YS91dGlsL0xpc3Q7eHBwcHVy" + 239 "AB5bTGphdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudDsCRio8PP0iOQIAAHhw" + 240 "AAAAAXNyABtqYXZhLmxhbmcuU3RhY2tUcmFjZUVsZW1lbnRhCcWaJjbdhQIA" + 241 "CEIABmZvcm1hdEkACmxpbmVOdW1iZXJMAA9jbGFzc0xvYWRlck5hbWVxAH4A" + 242 "BUwADmRlY2xhcmluZ0NsYXNzcQB+AAVMAAhmaWxlTmFtZXEAfgAFTAAKbWV0" + 243 "aG9kTmFtZXEAfgAFTAAKbW9kdWxlTmFtZXEAfgAFTAANbW9kdWxlVmVyc2lv" + 244 "bnEAfgAFeHABAAAAEnQAA2FwcHQABFRlc3R0AAlUZXN0LmphdmF0AARtYWlu" + 245 "cHBzcgAfamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TGlzdHq4F7Q8p57e" + 246 "AgAAeHB4c3IAD2phdmEubGFuZy5FcnJvckUdNlaLgg5WAgAAeHEAfgAEcQB+" + 247 "ABR0AANnb291cQB+AAkAAAABc3EAfgALAQAAABJxAH4ADXEAfgAOcQB+AA9x" + 248 "AH4AEHBwcQB+ABJ4"; 249 250 private static final String UTE1_OLD_VERSION = 251 "rO0ABXNyAC5qYXZhLmxhbmcucmVmbGVjdC5VbmRlY2xhcmVkVGhyb3dhYmxl" + 252 "RXhjZXB0aW9uBJTY3HP5/P8CAAFMABN1bmRlY2xhcmVkVGhyb3dhYmxldAAV" + 253 "TGphdmEvbGFuZy9UaHJvd2FibGU7eHIAGmphdmEubGFuZy5SdW50aW1lRXhj" + 254 "ZXB0aW9unl8GRwo0g+UCAAB4cgATamF2YS5sYW5nLkV4Y2VwdGlvbtD9Hz4a" + 255 "OxzEAgAAeHIAE2phdmEubGFuZy5UaHJvd2FibGXVxjUnOXe4ywMABEwABWNh" + 256 "dXNlcQB+AAFMAA1kZXRhaWxNZXNzYWdldAASTGphdmEvbGFuZy9TdHJpbmc7" + 257 "WwAKc3RhY2tUcmFjZXQAHltMamF2YS9sYW5nL1N0YWNrVHJhY2VFbGVtZW50" + 258 "O0wAFHN1cHByZXNzZWRFeGNlcHRpb25zdAAQTGphdmEvdXRpbC9MaXN0O3hw" + 259 "cHQAA2JhcnVyAB5bTGphdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudDsCRio8" + 260 "PP0iOQIAAHhwAAAAAXNyABtqYXZhLmxhbmcuU3RhY2tUcmFjZUVsZW1lbnRh" + 261 "CcWaJjbdhQIACEIABmZvcm1hdEkACmxpbmVOdW1iZXJMAA9jbGFzc0xvYWRl" + 262 "ck5hbWVxAH4ABUwADmRlY2xhcmluZ0NsYXNzcQB+AAVMAAhmaWxlTmFtZXEA" + 263 "fgAFTAAKbWV0aG9kTmFtZXEAfgAFTAAKbW9kdWxlTmFtZXEAfgAFTAANbW9k" + 264 "dWxlVmVyc2lvbnEAfgAFeHABAAAAE3QAA2FwcHQABFRlc3R0AAlUZXN0Lmph" + 265 "dmF0AARtYWlucHBzcgAfamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TGlz" + 266 "dHq4F7Q8p57eAgAAeHB4c3IAImphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRF" + 267 "eGNlcHRpb261iXPTfWaPvAIAAHhxAH4AAnEAfgAVdAADZm9vdXEAfgAKAAAA" + 268 "AXNxAH4ADAEAAAATcQB+AA5xAH4AD3EAfgAQcQB+ABFwcHEAfgATeA=="; 269 270 private static final String UTE2_OLD_VERSION = 271 "rO0ABXNyAC5qYXZhLmxhbmcucmVmbGVjdC5VbmRlY2xhcmVkVGhyb3dhYmxl" + 272 "RXhjZXB0aW9uBJTY3HP5/P8CAAFMABN1bmRlY2xhcmVkVGhyb3dhYmxldAAV" + 273 "TGphdmEvbGFuZy9UaHJvd2FibGU7eHIAGmphdmEubGFuZy5SdW50aW1lRXhj" + 274 "ZXB0aW9unl8GRwo0g+UCAAB4cgATamF2YS5sYW5nLkV4Y2VwdGlvbtD9Hz4a" + 275 "OxzEAgAAeHIAE2phdmEubGFuZy5UaHJvd2FibGXVxjUnOXe4ywMABEwABWNh" + 276 "dXNlcQB+AAFMAA1kZXRhaWxNZXNzYWdldAASTGphdmEvbGFuZy9TdHJpbmc7" + 277 "WwAKc3RhY2tUcmFjZXQAHltMamF2YS9sYW5nL1N0YWNrVHJhY2VFbGVtZW50" + 278 "O0wAFHN1cHByZXNzZWRFeGNlcHRpb25zdAAQTGphdmEvdXRpbC9MaXN0O3hw" + 279 "cHB1cgAeW0xqYXZhLmxhbmcuU3RhY2tUcmFjZUVsZW1lbnQ7AkYqPDz9IjkC" + 280 "AAB4cAAAAAFzcgAbamF2YS5sYW5nLlN0YWNrVHJhY2VFbGVtZW50YQnFmiY2" + 281 "3YUCAAhCAAZmb3JtYXRJAApsaW5lTnVtYmVyTAAPY2xhc3NMb2FkZXJOYW1l" + 282 "cQB+AAVMAA5kZWNsYXJpbmdDbGFzc3EAfgAFTAAIZmlsZU5hbWVxAH4ABUwA" + 283 "Cm1ldGhvZE5hbWVxAH4ABUwACm1vZHVsZU5hbWVxAH4ABUwADW1vZHVsZVZl" + 284 "cnNpb25xAH4ABXhwAQAAABR0AANhcHB0AARUZXN0dAAJVGVzdC5qYXZhdAAE" + 285 "bWFpbnBwc3IAH2phdmEudXRpbC5Db2xsZWN0aW9ucyRFbXB0eUxpc3R6uBe0" + 286 "PKee3gIAAHhweHNyACJqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0" + 287 "aW9utYlz031mj7wCAAB4cQB+AAJxAH4AFHQAA2dvb3VxAH4ACQAAAAFzcQB+" + 288 "AAsBAAAAFHEAfgANcQB+AA5xAH4AD3EAfgAQcHBxAH4AEng="; 289 290 private static final String PAE_OLD_VERSION = 291 "rO0ABXNyACdqYXZhLnNlY3VyaXR5LlByaXZpbGVnZWRBY3Rpb25FeGNlcHRp" + 292 "b25Bj1P2UhH1ugIAAUwACWV4Y2VwdGlvbnQAFUxqYXZhL2xhbmcvRXhjZXB0" + 293 "aW9uO3hyABNqYXZhLmxhbmcuRXhjZXB0aW9u0P0fPho7HMQCAAB4cgATamF2" + 294 "YS5sYW5nLlRocm93YWJsZdXGNSc5d7jLAwAETAAFY2F1c2V0ABVMamF2YS9s" + 295 "YW5nL1Rocm93YWJsZTtMAA1kZXRhaWxNZXNzYWdldAASTGphdmEvbGFuZy9T" + 296 "dHJpbmc7WwAKc3RhY2tUcmFjZXQAHltMamF2YS9sYW5nL1N0YWNrVHJhY2VF" + 297 "bGVtZW50O0wAFHN1cHByZXNzZWRFeGNlcHRpb25zdAAQTGphdmEvdXRpbC9M" + 298 "aXN0O3hwcHB1cgAeW0xqYXZhLmxhbmcuU3RhY2tUcmFjZUVsZW1lbnQ7AkYq" + 299 "PDz9IjkCAAB4cAAAAAFzcgAbamF2YS5sYW5nLlN0YWNrVHJhY2VFbGVtZW50" + 300 "YQnFmiY23YUCAAhCAAZmb3JtYXRJAApsaW5lTnVtYmVyTAAPY2xhc3NMb2Fk" + 301 "ZXJOYW1lcQB+AAVMAA5kZWNsYXJpbmdDbGFzc3EAfgAFTAAIZmlsZU5hbWVx" + 302 "AH4ABUwACm1ldGhvZE5hbWVxAH4ABUwACm1vZHVsZU5hbWVxAH4ABUwADW1v" + 303 "ZHVsZVZlcnNpb25xAH4ABXhwAQAAABd0AANhcHB0AARUZXN0dAAJVGVzdC5q" + 304 "YXZhdAAEbWFpbnBwc3IAH2phdmEudXRpbC5Db2xsZWN0aW9ucyRFbXB0eUxp" + 305 "c3R6uBe0PKee3gIAAHhweHNyABNqYXZhLmlvLklPRXhjZXB0aW9ubIBzZGUl" + 306 "8KsCAAB4cQB+AAJxAH4AFHQAA2Zvb3VxAH4ACQAAAAFzcQB+AAsBAAAAF3EA" + 307 "fgANcQB+AA5xAH4AD3EAfgAQcHBxAH4AEng="; 308 309 private static Map<String, Throwable> SERIALIZED_DATA = Map.of( 310 EIIE_OLD_VERSION, new ExceptionInInitializerError(new NullPointerException("foo")), 311 CNFE_OLD_VERSION, new ClassNotFoundException("bar", new IOException("reading class file")), 312 ITE1_OLD_VERSION, new InvocationTargetException(new Error("foo"), "bar"), 313 ITE2_OLD_VERSION, new InvocationTargetException(new Error("goo")), 314 UTE1_OLD_VERSION, new UndeclaredThrowableException(new IllegalArgumentException("foo"), "bar"), 315 UTE2_OLD_VERSION, new UndeclaredThrowableException(new IllegalArgumentException("goo")), 316 PAE_OLD_VERSION, new PrivilegedActionException(new IOException("foo")) 317 ); 318 } |