001 /*
002 * Portions Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025 /*
026 * @(#)author IBM Corp.
027 *
028 * Copyright IBM Corp. 1999-2000. All rights reserved.
029 */
030
031 package javax.management.modelmbean;
032
033 import com.sun.jmx.mbeanserver.GetPropertyAction;
034
035 import java.io.IOException;
036 import java.io.ObjectInputStream;
037 import java.io.ObjectOutputStream;
038 import java.io.ObjectStreamField;
039 import java.security.AccessController;
040
041 /**
042 * Exception thrown when an invalid target object type is specified.
043 *
044 *
045 * <p>The <b>serialVersionUID</b> of this class is <code>1190536278266811217L</code>.
046 *
047 * @since 1.5
048 */
049 @SuppressWarnings("serial")
050 // serialVersionUID not constant
051 public class InvalidTargetObjectTypeException extends Exception {
052
053 // Serialization compatibility stuff:
054 // Two serial forms are supported in this class. The selected form depends
055 // on system property "jmx.serial.form":
056 // - "1.0" for JMX 1.0
057 // - any other value for JMX 1.1 and higher
058 //
059 // Serial version for old serial form
060 private static final long oldSerialVersionUID = 3711724570458346634L;
061 //
062 // Serial version for new serial form
063 private static final long newSerialVersionUID = 1190536278266811217L;
064 //
065 // Serializable fields in old serial form
066 private static final ObjectStreamField[] oldSerialPersistentFields = {
067 new ObjectStreamField("msgStr", String.class),
068 new ObjectStreamField("relatedExcept", Exception.class) };
069 //
070 // Serializable fields in new serial form
071 private static final ObjectStreamField[] newSerialPersistentFields = { new ObjectStreamField(
072 "exception", Exception.class) };
073 //
074 // Actual serial version and serial form
075 private static final long serialVersionUID;
076 /**
077 * @serialField exception Exception Encapsulated {@link Exception}
078 */
079 private static final ObjectStreamField[] serialPersistentFields;
080 private static boolean compat = false;
081 static {
082 try {
083 GetPropertyAction act = new GetPropertyAction(
084 "jmx.serial.form");
085 String form = AccessController.doPrivileged(act);
086 compat = (form != null && form.equals("1.0"));
087 } catch (Exception e) {
088 // OK: No compat with 1.0
089 }
090 if (compat) {
091 serialPersistentFields = oldSerialPersistentFields;
092 serialVersionUID = oldSerialVersionUID;
093 } else {
094 serialPersistentFields = newSerialPersistentFields;
095 serialVersionUID = newSerialVersionUID;
096 }
097 }
098 //
099 // END Serialization compatibility stuff
100
101 /**
102 * @serial Encapsulated {@link Exception}
103 */
104 Exception exception;
105
106 /**
107 * Default constructor.
108 */
109 public InvalidTargetObjectTypeException() {
110 super ("InvalidTargetObjectTypeException: ");
111 exception = null;
112 }
113
114 /**
115 * Constructor from a string.
116 *
117 * @param s String value that will be incorporated in the message for
118 * this exception.
119 */
120
121 public InvalidTargetObjectTypeException(String s) {
122 super ("InvalidTargetObjectTypeException: " + s);
123 exception = null;
124 }
125
126 /**
127 * Constructor taking an exception and a string.
128 *
129 * @param e Exception that we may have caught to reissue as an
130 * InvalidTargetObjectTypeException. The message will be used, and we may want to
131 * consider overriding the printStackTrace() methods to get data
132 * pointing back to original throw stack.
133 * @param s String value that will be incorporated in message for
134 * this exception.
135 */
136
137 public InvalidTargetObjectTypeException(Exception e, String s) {
138 super ("InvalidTargetObjectTypeException: "
139 + s
140 + ((e != null) ? ("\n\t triggered by:" + e.toString())
141 : ""));
142 exception = e;
143 }
144
145 /**
146 * Deserializes an {@link InvalidTargetObjectTypeException} from an {@link ObjectInputStream}.
147 */
148 private void readObject(ObjectInputStream in) throws IOException,
149 ClassNotFoundException {
150 if (compat) {
151 // Read an object serialized in the old serial form
152 //
153 ObjectInputStream.GetField fields = in.readFields();
154 exception = (Exception) fields.get("relatedExcept", null);
155 if (fields.defaulted("relatedExcept")) {
156 throw new NullPointerException("relatedExcept");
157 }
158 } else {
159 // Read an object serialized in the new serial form
160 //
161 in.defaultReadObject();
162 }
163 }
164
165 /**
166 * Serializes an {@link InvalidTargetObjectTypeException} to an {@link ObjectOutputStream}.
167 */
168 private void writeObject(ObjectOutputStream out) throws IOException {
169 if (compat) {
170 // Serializes this instance in the old serial form
171 //
172 ObjectOutputStream.PutField fields = out.putFields();
173 fields.put("relatedExcept", exception);
174 fields.put("msgStr", ((exception != null) ? exception
175 .getMessage() : ""));
176 out.writeFields();
177 } else {
178 // Serializes this instance in the new serial form
179 //
180 out.defaultWriteObject();
181 }
182 }
183 }
|