1 /*
2  * Copyright (c) 2010, 2011, 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  * Portions Copyright (c) 2010, 2011 IBM Corporation
26  */
27 
28 /*
29  * @test
30  * @bug 6934356
31  * @summary A serialized Vector can be successfully de-serialized.
32  * @author Neil Richards <neil.richards@ngmr.net>, <neil_richards@uk.ibm.com>
33  */
34 
35 package test.java.util.Vector;
36 
37 import java.io.ByteArrayInputStream;
38 import java.io.ByteArrayOutputStream;
39 import java.io.IOException;
40 import java.io.ObjectInputStream;
41 import java.io.ObjectOutputStream;
42 import java.io.PrintWriter;
43 import java.io.StringWriter;
44 import java.util.Vector;
45 
46 public class SimpleSerialization {
main(final String[] args)47     public static void main(final String[] args) throws Exception {
48         final Vector<String> v1 = new Vector<>();
49 
50         v1.add("entry1");
51         v1.add("entry2");
52 
53         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
54         final ObjectOutputStream oos = new ObjectOutputStream(baos);
55 
56         oos.writeObject(v1);
57         oos.close();
58 
59         final byte[] data = baos.toByteArray();
60         final ByteArrayInputStream bais = new ByteArrayInputStream(data);
61         final ObjectInputStream ois = new ObjectInputStream(bais);
62 
63         final Object deserializedObject = ois.readObject();
64         ois.close();
65 
66         if (false == v1.equals(deserializedObject)) {
67             throw new RuntimeException(getFailureText(v1, deserializedObject));
68         }
69     }
70 
getFailureText(final Object orig, final Object copy)71     private static String getFailureText(final Object orig, final Object copy) {
72         final StringWriter sw = new StringWriter();
73         final PrintWriter pw = new PrintWriter(sw);
74 
75         pw.println("Test FAILED: Deserialized object is not equal to the original object");
76         pw.print("\tOriginal: ");
77         printObject(pw, orig).println();
78         pw.print("\tCopy:     ");
79         printObject(pw, copy).println();
80 
81         pw.close();
82         return sw.toString();
83     }
84 
printObject(final PrintWriter pw, final Object o)85     private static PrintWriter printObject(final PrintWriter pw, final Object o) {
86         pw.printf("%s@%08x", o.getClass().getName(), System.identityHashCode(o));
87         return pw;
88     }
89 }
90