blob: 47f4acb3f3bb41a9900883c63a5d9441a1fadd72 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Portions Copyright 2000-2006 Sun Microsystems, Inc. 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. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25/*
26 * @author IBM Corp.
27 *
28 * Copyright IBM Corp. 1999-2000. All rights reserved.
29 */
30
31package javax.management.modelmbean;
32
33import com.sun.jmx.mbeanserver.GetPropertyAction;
34
35import java.io.IOException;
36import java.io.ObjectInputStream;
37import java.io.ObjectOutputStream;
38import java.io.ObjectStreamField;
39import java.security.AccessController;
40
41/**
42 * Exception thrown when an invalid target object type is specified.
43 *
44 *
45 * <p>The <b>serialVersionUID</b> of this class is <code>1190536278266811217L</code>.
46 *
47 * @since 1.5
48 */
49@SuppressWarnings("serial") // serialVersionUID not constant
50public class InvalidTargetObjectTypeException extends Exception
51{
52
53 // Serialization compatibility stuff:
54 // Two serial forms are supported in this class. The selected form depends
55 // on system property "jmx.serial.form":
56 // - "1.0" for JMX 1.0
57 // - any other value for JMX 1.1 and higher
58 //
59 // Serial version for old serial form
60 private static final long oldSerialVersionUID = 3711724570458346634L;
61 //
62 // Serial version for new serial form
63 private static final long newSerialVersionUID = 1190536278266811217L;
64 //
65 // Serializable fields in old serial form
66 private static final ObjectStreamField[] oldSerialPersistentFields =
67 {
68 new ObjectStreamField("msgStr", String.class),
69 new ObjectStreamField("relatedExcept", Exception.class)
70 };
71 //
72 // Serializable fields in new serial form
73 private static final ObjectStreamField[] newSerialPersistentFields =
74 {
75 new ObjectStreamField("exception", Exception.class)
76 };
77 //
78 // Actual serial version and serial form
79 private static final long serialVersionUID;
80 /**
81 * @serialField exception Exception Encapsulated {@link Exception}
82 */
83 private static final ObjectStreamField[] serialPersistentFields;
84 private static boolean compat = false;
85 static {
86 try {
87 GetPropertyAction act = new GetPropertyAction("jmx.serial.form");
88 String form = AccessController.doPrivileged(act);
89 compat = (form != null && form.equals("1.0"));
90 } catch (Exception e) {
91 // OK: No compat with 1.0
92 }
93 if (compat) {
94 serialPersistentFields = oldSerialPersistentFields;
95 serialVersionUID = oldSerialVersionUID;
96 } else {
97 serialPersistentFields = newSerialPersistentFields;
98 serialVersionUID = newSerialVersionUID;
99 }
100 }
101 //
102 // END Serialization compatibility stuff
103
104 /**
105 * @serial Encapsulated {@link Exception}
106 */
107 Exception exception;
108
109
110 /**
111 * Default constructor.
112 */
113 public InvalidTargetObjectTypeException ()
114 {
115 super("InvalidTargetObjectTypeException: ");
116 exception = null;
117 }
118
119
120 /**
121 * Constructor from a string.
122 *
123 * @param s String value that will be incorporated in the message for
124 * this exception.
125 */
126
127 public InvalidTargetObjectTypeException (String s)
128 {
129 super("InvalidTargetObjectTypeException: " + s);
130 exception = null;
131 }
132
133
134 /**
135 * Constructor taking an exception and a string.
136 *
137 * @param e Exception that we may have caught to reissue as an
138 * InvalidTargetObjectTypeException. The message will be used, and we may want to
139 * consider overriding the printStackTrace() methods to get data
140 * pointing back to original throw stack.
141 * @param s String value that will be incorporated in message for
142 * this exception.
143 */
144
145 public InvalidTargetObjectTypeException (Exception e, String s)
146 {
147 super("InvalidTargetObjectTypeException: " +
148 s +
149 ((e != null)?("\n\t triggered by:" + e.toString()):""));
150 exception = e;
151 }
152
153 /**
154 * Deserializes an {@link InvalidTargetObjectTypeException} from an {@link ObjectInputStream}.
155 */
156 private void readObject(ObjectInputStream in)
157 throws IOException, ClassNotFoundException {
158 if (compat)
159 {
160 // Read an object serialized in the old serial form
161 //
162 ObjectInputStream.GetField fields = in.readFields();
163 exception = (Exception) fields.get("relatedExcept", null);
164 if (fields.defaulted("relatedExcept"))
165 {
166 throw new NullPointerException("relatedExcept");
167 }
168 }
169 else
170 {
171 // Read an object serialized in the new serial form
172 //
173 in.defaultReadObject();
174 }
175 }
176
177
178 /**
179 * Serializes an {@link InvalidTargetObjectTypeException} to an {@link ObjectOutputStream}.
180 */
181 private void writeObject(ObjectOutputStream out)
182 throws IOException {
183 if (compat)
184 {
185 // Serializes this instance in the old serial form
186 //
187 ObjectOutputStream.PutField fields = out.putFields();
188 fields.put("relatedExcept", exception);
189 fields.put("msgStr", ((exception != null)?exception.getMessage():""));
190 out.writeFields();
191 }
192 else
193 {
194 // Serializes this instance in the new serial form
195 //
196 out.defaultWriteObject();
197 }
198 }
199}