001: /**
002: * The XMOJO Project 5
003: * Copyright © 2003 XMOJO.org. All rights reserved.
004:
005: * NO WARRANTY
006:
007: * BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
008: * THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
009: * OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
010: * PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
011: * OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
012: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
013: * TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE
014: * LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
015: * REPAIR OR CORRECTION.
016:
017: * IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
018: * ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
019: * THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
020: * GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
021: * USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF
022: * DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
023: * PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE),
024: * EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
025: * SUCH DAMAGES.
026: **/package javax.management.loading;
027:
028: import java.lang.reflect.Array;
029: import java.io.InputStream;
030: import java.io.ObjectInputStream;
031: import java.io.ObjectStreamClass;
032: import java.io.IOException;
033: import java.io.StreamCorruptedException;
034:
035: class MLetObjectInputStream extends ObjectInputStream {
036:
037: public MLetObjectInputStream(InputStream inputstream, MLet mlet)
038: throws IOException, StreamCorruptedException {
039: super (inputstream);
040: if (mlet == null) {
041: throw new IllegalArgumentException(
042: "Illegal null argument to MLetObjectInputStream");
043: } else {
044: loader = mlet;
045: return;
046: }
047: }
048:
049: private Class primitiveType(char c) {
050: switch (c) {
051: case 66: // 'B'
052: return Byte.TYPE;
053:
054: case 67: // 'C'
055: return Character.TYPE;
056:
057: case 68: // 'D'
058: return Double.TYPE;
059:
060: case 70: // 'F'
061: return Float.TYPE;
062:
063: case 73: // 'I'
064: return Integer.TYPE;
065:
066: case 74: // 'J'
067: return Long.TYPE;
068:
069: case 83: // 'S'
070: return Short.TYPE;
071:
072: case 90: // 'Z'
073: return Boolean.TYPE;
074:
075: case 69: // 'E'
076: case 71: // 'G'
077: case 72: // 'H'
078: case 75: // 'K'
079: case 76: // 'L'
080: case 77: // 'M'
081: case 78: // 'N'
082: case 79: // 'O'
083: case 80: // 'P'
084: case 81: // 'Q'
085: case 82: // 'R'
086: case 84: // 'T'
087: case 85: // 'U'
088: case 86: // 'V'
089: case 87: // 'W'
090: case 88: // 'X'
091: case 89: // 'Y'
092: default:
093: return null;
094: }
095: }
096:
097: protected Class resolveClass(ObjectStreamClass objectstreamclass)
098: throws IOException, ClassNotFoundException {
099: String s = objectstreamclass.getName();
100: if (s.startsWith("[")) {
101: int i;
102: for (i = 1; s.charAt(i) == '['; i++)
103: ;
104: Class class1;
105: if (s.charAt(i) == 'L') {
106: class1 = loader.loadClass(s.substring(i + 1,
107: s.length() - 1));
108: } else {
109: if (s.length() != i + 1)
110: throw new ClassNotFoundException(s);
111: class1 = primitiveType(s.charAt(i));
112: }
113: int ai[] = new int[i];
114: for (int j = 0; j < i; j++)
115: ai[j] = 0;
116:
117: return Array.newInstance(class1, ai).getClass();
118: } else {
119: return loader.loadClass(s);
120: }
121: }
122:
123: public ClassLoader getClassLoader() {
124: return loader;
125: }
126:
127: private MLet loader;
128: }
|