⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 valuehandlerimpl.java

📁 java jdk 1.4的源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		out.write_octet_array(array, 0, length);            } else if (type == Long.TYPE) {		long[] array = (long[])((Object)obj);		length = array.length;		out.write_ulong(length);		out.write_longlong_array(array, 0, length);            } else if (type == Float.TYPE) {		float[] array = (float[])((Object)obj);		length = array.length;		out.write_ulong(length);		out.write_float_array(array, 0, length);            } else if (type == Double.TYPE) {		double[] array = (double[])((Object)obj);		length = array.length;		out.write_ulong(length);		out.write_double_array(array, 0, length);            } else if (type == Short.TYPE) {		short[] array = (short[])((Object)obj);		length = array.length;		out.write_ulong(length);		out.write_short_array(array, 0, length);            } else if (type == Character.TYPE) {		char[] array = (char[])((Object)obj);		length = array.length;		out.write_ulong(length);		writeCharArray(out, array, 0, length);            } else if (type == Boolean.TYPE) {		boolean[] array = (boolean[])((Object)obj);		length = array.length;		out.write_ulong(length);		out.write_boolean_array(array, 0, length);            } else {		throw new Error("Invalid primitive type : " + obj.getClass().getName());            }        } else if (type == java.lang.Object.class) {            Object[] array = (Object[])((Object)obj);            length = array.length;            out.write_ulong(length);            for (i = 0; i < length; i++) {               		Util.writeAny(out, array[i]);	    }        } else {            Object[] array = (Object[])((Object)obj);            length = array.length;            out.write_ulong(length);	    int callType = kValueType;				    if (type.isInterface()) { 		String className = type.getName();						if (java.rmi.Remote.class.isAssignableFrom(type)) {							    // RMI Object reference...							    callType = kRemoteType;							} else if (org.omg.CORBA.Object.class.isAssignableFrom(type)){							    // IDL Object reference...		    callType = kRemoteType;							} else if (RepositoryId.isAbstractBase(type)) {		    // IDL Abstract Object reference...		    callType = kAbstractType;							} else if (ObjectStreamClassCorbaExt.isAbstractInterface(type)) {							        callType = kAbstractType;	        }					    }				    for (i = 0; i < length; i++) {						switch (callType) {		case kRemoteType: 		    Util.writeRemoteObject(out, array[i]);		    break;		case kAbstractType: 		    Util.writeAbstractObject(out,array[i]);		    break;		case kValueType:		    try{			out.write_value((java.io.Serializable)array[i]);		    }		    catch(ClassCastException cce){			if (array[i] instanceof java.io.Serializable)			    throw cce;			else {			    Utility.throwNotSerializableForCorba(array[i].getClass().getName());											}		    }		    break;		}	    }        }    }    /**     * Encapsulates reading of Java char arrays so that the 1.3 subclass     * can override it without exposing internals across packages.  This     * is a fix for bug 4367783.     */    protected void readCharArray(org.omg.CORBA_2_3.portable.InputStream in,                                 char[] array,                                 int offset,                                 int length)    {          in.read_wchar_array(array, offset, length);    }    private java.lang.Object read_Array(IIOPInputStream bridge,                                         org.omg.CORBA_2_3.portable.InputStream in,					Class sequence,                                         com.sun.org.omg.SendingContext.CodeBase sender,                                        int offset) {		    	try {	    // Read length of coming array            int length = in.read_ulong();            int i;            Class type = null;	    if (sequence == null) {		for (i = 0; i < length; i++)		    in.read_value();		return null;	    }				    type = sequence.getComponentType();            if (type.isPrimitive()) {                if (type == Integer.TYPE) {		    int[] array = new int[length];		    in.read_long_array(array, 0, length);		    return ((java.io.Serializable)((Object)array));                } else if (type == Byte.TYPE) {		    byte[] array = new byte[length];		    in.read_octet_array(array, 0, length);		    return ((java.io.Serializable)((Object)array));                } else if (type == Long.TYPE) {		    long[] array = new long[length];		    in.read_longlong_array(array, 0, length);		    return ((java.io.Serializable)((Object)array));                } else if (type == Float.TYPE) {		    float[] array = new float[length];		    in.read_float_array(array, 0, length);		    return ((java.io.Serializable)((Object)array));                } else if (type == Double.TYPE) {		    double[] array = new double[length];		    in.read_double_array(array, 0, length);		    return ((java.io.Serializable)((Object)array));                } else if (type == Short.TYPE) {		    short[] array = new short[length];		    in.read_short_array(array, 0, length);		    return ((java.io.Serializable)((Object)array));                } else if (type == Character.TYPE) {		    char[] array = new char[length];		    readCharArray(in, array, 0, length);		    return ((java.io.Serializable)((Object)array));                } else if (type == Boolean.TYPE) {		    boolean[] array = new boolean[length];		    in.read_boolean_array(array, 0, length);		    return ((java.io.Serializable)((Object)array));                } else {		    throw new Error("Invalid primitive type : " + sequence.getName());                }            } else if (type == java.lang.Object.class) {		Object[] array = (Object[])java.lang.reflect.Array.newInstance(type, length);                // Store this object and its beginning position                // since there might be indirections to it while                // it's been unmarshalled.                bridge.activeRecursionMgr.addObject(offset, array);                for (i = 0; i < length; i++) {                    Object objectValue = null;                    try {                        objectValue = Util.readAny(in);                    }                    catch(IndirectionException cdrie) {                        try {                            // The CDR stream had never seen the given offset before,                            // so check the recursion manager (it will throw an                            // IOException if it doesn't have a reference, either).                            objectValue = bridge.activeRecursionMgr.getObject(cdrie.offset);                        } catch (IOException ie) {                            // Translate to a MARSHAL exception since                            // ValueHandlers aren't allowed to throw                            // IOExceptions                            throw new MARSHAL("Invalid indirection to offset "                                              + cdrie.offset,                                              MinorCodes.INVALID_INDIRECTION,                                              CompletionStatus.COMPLETED_NO);                        }                    }                                        array[i] = objectValue;                }                return ((java.io.Serializable)((Object)array));                        } else {		Object[] array = (Object[])java.lang.reflect.Array.newInstance(type, length);                // Store this object and its beginning position                // since there might be indirections to it while                // it's been unmarshalled.				                bridge.activeRecursionMgr.addObject(offset, array);				// Decide what method call to make based on the type. If				// it is a type for which we need to load a stub, convert				// the type to the correct stub type.				                int callType = kValueType;                boolean narrow = false;				                if (type.isInterface()) {                     boolean loadStubClass = false;                    // String className = type.getName();                                            if (java.rmi.Remote.class.isAssignableFrom(type)) {						                        // RMI Object reference...                                                // className = Utility.stubName(className);                        callType = kRemoteType;                                                // for better performance, load the stub class once                        // instead of for each element of the array                        loadStubClass = true;                                            } else if (org.omg.CORBA.Object.class.isAssignableFrom(type)){                                                // IDL Object reference...                                                // className = Utility.idlStubName(className);                        callType = kRemoteType;                        loadStubClass = true;                                            } else if (RepositoryId.isAbstractBase(type)) {                        // IDL Abstract Object reference...                                                // className = Utility.idlStubName(className);                        callType = kAbstractType;                        loadStubClass = true;                    } else if (ObjectStreamClassCorbaExt.isAbstractInterface(type)) {                                                // RMI Abstract Object reference...                                                // type = null;                        callType = kAbstractType;                                            }                                        if (loadStubClass) {                        try {                            String codebase = Util.getCodebase(type);                            String repID = RepositoryId.createForAnyType(type);                            type = Utility.loadStubClass(repID, codebase, type); //d11638                        } catch (ClassNotFoundException e) {                            narrow = true;                        }                    } else {                        narrow = true;                    }                }                                for (i = 0; i < length; i++) {                                        try {                        switch (callType) {                        case kRemoteType:                             if (!narrow)                                array[i] = (Object)in.read_Object(type);                             else {                                array[i] = Utility.readObjectAndNarrow(in, type);                                                            }                            break;                        case kAbstractType:                             if (!narrow)                                array[i] = (Object)in.read_abstract_interface(type);                             else {                                array[i] = Utility.readAbstractAndNarrow(in, type);                            }                            break;                        case kValueType:                            array[i] = (Object)in.read_value(type);                            break;                        }                    }                    catch(IndirectionException cdrie) {                        // The CDR stream had never seen the given offset before,                        // so check the recursion manager (it will throw an                        // IOException if it doesn't have a reference, either).                        try {                            array[i] = bridge.activeRecursionMgr.getObject(cdrie.offset);                        } catch (IOException ioe) {                            // Translate to a MARSHAL exception since                            // ValueHandlers aren't allowed to throw                            // IOExceptions                            throw new MARSHAL("Invalid indirection to offset "                                              + cdrie.offset,                                              MinorCodes.INVALID_INDIRECTION,                                              CompletionStatus.COMPLETED_NO);                        }                    }                                    }                                return ((java.io.Serializable)((Object)array));                	    }			        } finally {            // We've completed deserializing this object.  Any            // future indirections will be handled correctly at the            // CDR level.  The ActiveRecursionManager only deals with            // objects currently being deserialized.            bridge.activeRecursionMgr.removeObject(offset);        }    }    private boolean isArray(String repId){	return RepositoryId.cache.getId(repId).isSequence();    }    protected String getOutputStreamClassName() {        return "com.sun.corba.se.internal.io.IIOPOutputStream";    }    private com.sun.corba.se.internal.io.IIOPOutputStream createOutputStream() {        return (com.sun.corba.se.internal.io.IIOPOutputStream)AccessController.doPrivileged(new StreamFactory(getOutputStreamClassName()));    }    protected String getInputStreamClassName() {        return "com.sun.corba.se.internal.io.IIOPInputStream";    }    private com.sun.corba.se.internal.io.IIOPInputStream createInputStream() {        return (com.sun.corba.se.internal.io.IIOPInputStream)AccessController.doPrivileged(new StreamFactory(getInputStreamClassName()));    }    /**     * Instantiates a class of the given name using the system ClassLoader     * as part of a PrivilegedAction.     *     * It's private final so hopefully people can't grab it outside of     * this class.     *     * If you're worried that someone could subclass ValueHandlerImpl,     * install his own streams, and snoop what's on the wire:     * Someone can do that only if he's allowed to use the feature     * of installing his own javax.rmi.CORBA.Util delegate (via a     * JVM property or orb.properties file, read the first time the     * Util class is used).  If he can do that, he can snoop     * anything on the wire, anyway, without abusing the     * StreamFactory class.     */    private static final class StreamFactory implements PrivilegedAction {        private String className;        public StreamFactory (String _className) {            className = _className;        }        public Object run() {            try {                // Note: We must use the system ClassLoader here                // since we want to load classes outside of the                // core JDK when running J2EE Pure ORB and                // talking to Kestrel.                ClassLoader cl = Thread.currentThread().getContextClassLoader();                if (cl == null)                    cl = ClassLoader.getSystemClassLoader();                Class streamClass = cl.loadClass(className);                // Since the ClassLoader should cache the class, this isn't                // as expensive as it looks.                return streamClass.newInstance();            } catch(Throwable t) {                throw new InternalError("Error loading "                                        + className                                        + ": "                                        + t.getClass().getName()                                        + ": "                                        + t.getMessage());            }        }    }    /**     * Our JDK 1.3 and JDK 1.3.1 behavior subclasses override this.     * The correct behavior is for a Java char to map to a CORBA wchar,     * but our older code mapped it to a CORBA char.     */    protected TCKind getJavaCharTCKind() {        return TCKind.tk_wchar;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -