- /*
- * @(#)MLetObjectInputStream.java 1.14 03/12/19
- *
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- */
-
- package javax.management.loading;
-
-
- // java import
-
- import java.io.*;
- import java.lang.reflect.Array;
-
-
- /**
- * This subclass of ObjectInputStream delegates loading of classes to
- * an existing MLetClassLoader.
- *
- * @since 1.5
- */
- class MLetObjectInputStream extends ObjectInputStream {
-
- private MLet loader;
-
- /**
- * Loader must be non-null;
- */
- public MLetObjectInputStream(InputStream in, MLet loader)
- throws IOException, StreamCorruptedException {
-
- super(in);
- if (loader == null) {
- throw new IllegalArgumentException("Illegal null argument to MLetObjectInputStream");
- }
- this.loader = loader;
- }
-
- private Class primitiveType(char c) {
- switch(c) {
- case 66: /* 'B' */
- return Byte.TYPE;
-
- case 67: /* 'C' */
- return Character.TYPE;
-
- case 68: /* 'D' */
- return Double.TYPE;
-
- case 70: /* 'F' */
- return Float.TYPE;
-
- case 73: /* 'I' */
- return Integer.TYPE;
-
- case 74: /* 'J' */
- return Long.TYPE;
-
- case 83: /* 'S' */
- return Short.TYPE;
-
- case 90: /* 'Z' */
- return Boolean.TYPE;
- }
- return null;
- }
-
- /**
- * Use the given ClassLoader rather than using the system class
- */
- protected Class resolveClass(ObjectStreamClass objectstreamclass)
- throws IOException, ClassNotFoundException {
-
- String s = objectstreamclass.getName();
- if (s.startsWith("[")) {
- int i;
- for (i = 1; s.charAt(i) == '['; i++);
- Class class1;
- if (s.charAt(i) == 'L') {
- class1 = loader.loadClass(s.substring(i + 1, s.length() - 1));
- } else {
- if (s.length() != i + 1)
- throw new ClassNotFoundException(s);
- class1 = primitiveType(s.charAt(i));
- }
- int ai[] = new int[i];
- for (int j = 0; j < i; j++)
- ai[j] = 0;
-
- return Array.newInstance(class1, ai).getClass();
- } else {
- return loader.loadClass(s);
- }
- }
-
- /**
- * Returns the ClassLoader being used
- */
- public ClassLoader getClassLoader() {
- return loader;
- }
- }