예제 #1
0
        /// <summary>
        /// <code>readObject</code> for custom serialization.
        ///
        /// <para>This method reads this object's serialized form for this class
        /// as follows:
        ///
        /// </para>
        /// <para>The <code>readUTF</code> method is invoked on <code>in</code>
        /// to read the external ref type name for the <code>RemoteRef</code>
        /// instance to be filled in to this object's <code>ref</code> field.
        /// If the string returned by <code>readUTF</code> has length zero,
        /// the <code>readObject</code> method is invoked on <code>in</code>,
        /// and than the value returned by <code>readObject</code> is cast to
        /// <code>RemoteRef</code> and this object's <code>ref</code> field is
        /// set to that value.
        /// Otherwise, this object's <code>ref</code> field is set to a
        /// <code>RemoteRef</code> instance that is created of an
        /// implementation-specific class corresponding to the external ref
        /// type name returned by <code>readUTF</code>, and then
        /// the <code>readExternal</code> method is invoked on
        /// this object's <code>ref</code> field.
        ///
        /// </para>
        /// <para>If the external ref type name is
        /// <code>"UnicastRef"</code>, <code>"UnicastServerRef"</code>,
        /// <code>"UnicastRef2"</code>, <code>"UnicastServerRef2"</code>,
        /// or <code>"ActivatableRef"</code>, a corresponding
        /// implementation-specific class must be found, and its
        /// <code>readExternal</code> method must read the serial data
        /// for that external ref type name as specified to be written
        /// in the <b>serialData</b> documentation for this class.
        /// If the external ref type name is any other string (of non-zero
        /// length), a <code>ClassNotFoundException</code> will be thrown,
        /// unless the implementation provides an implementation-specific
        /// class corresponding to that external ref type name, in which
        /// case this object's <code>ref</code> field will be set to an
        /// instance of that implementation-specific class.
        /// </para>
        /// </summary>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException
        private void ReadObject(java.io.ObjectInputStream @in)
        {
            String refClassName = @in.ReadUTF();

            if (refClassName == null || refClassName.Length() == 0)
            {
                /*
                 * No reference class name specified, so construct
                 * remote reference from its serialized form.
                 */
                @ref = (RemoteRef)@in.ReadObject();
            }
            else
            {
                /*
                 * Built-in reference class specified, so delegate to
                 * internal reference class to initialize its fields from
                 * its external form.
                 */
                String internalRefClassName = RemoteRef_Fields.PackagePrefix + "." + refClassName;
                Class  refClass             = Class.ForName(internalRefClassName);
                try
                {
                    @ref = (RemoteRef)refClass.NewInstance();

                    /*
                     * If this step fails, assume we found an internal
                     * class that is not meant to be a serializable ref
                     * type.
                     */
                }
                catch (InstantiationException e)
                {
                    throw new ClassNotFoundException(internalRefClassName, e);
                }
                catch (IllegalAccessException e)
                {
                    throw new ClassNotFoundException(internalRefClassName, e);
                }
                catch (ClassCastException e)
                {
                    throw new ClassNotFoundException(internalRefClassName, e);
                }
                @ref.ReadExternal(@in);
            }
        }
예제 #2
0
        /// <summary>
        /// Restores this object from a stream (i.e., deserializes it).
        /// </summary>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private void readObject(java.io.ObjectInputStream ois) throws java.io.IOException, ClassNotFoundException
        private void ReadObject(java.io.ObjectInputStream ois)
        {
            CertificateFactory cf;
            Dictionary <String, CertificateFactory> cfs = null;

            ois.DefaultReadObject();

            if (Type == null)
            {
                throw new NullPointerException("type can't be null");
            }

            // process any new-style certs in the stream (if present)
            int size = ois.ReadInt();

            if (size > 0)
            {
                // we know of 3 different cert types: X.509, PGP, SDSI, which
                // could all be present in the stream at the same time
                cfs        = new Dictionary <String, CertificateFactory>(3);
                this.Certs = new java.security.cert.Certificate[size];
            }

            for (int i = 0; i < size; i++)
            {
                // read the certificate type, and instantiate a certificate
                // factory of that type (reuse existing factory if possible)
                String certType = ois.ReadUTF();
                if (cfs.ContainsKey(certType))
                {
                    // reuse certificate factory
                    cf = cfs[certType];
                }
                else
                {
                    // create new certificate factory
                    try
                    {
                        cf = CertificateFactory.GetInstance(certType);
                    }
                    catch (CertificateException)
                    {
                        throw new ClassNotFoundException("Certificate factory for " + certType + " not found");
                    }
                    // store the certificate factory so we can reuse it later
                    cfs[certType] = cf;
                }
                // parse the certificate
                sbyte[] encoded = null;
                try
                {
                    encoded = new sbyte[ois.ReadInt()];
                }
                catch (OutOfMemoryError)
                {
                    throw new IOException("Certificate too big");
                }
                ois.ReadFully(encoded);
                ByteArrayInputStream bais = new ByteArrayInputStream(encoded);
                try
                {
                    this.Certs[i] = cf.GenerateCertificate(bais);
                }
                catch (CertificateException ce)
                {
                    throw new IOException(ce.Message);
                }
                bais.Close();
            }
        }