corba/src/java.corba/share/classes/com/sun/corba/se/impl/io/IIOPInputStream.java
author msheppar
Mon, 20 Apr 2015 00:27:38 +0100
changeset 31733 0d786ab95c1c
parent 29936 9edf96e1b418
child 33324 4d5e1be7047d
permissions -rw-r--r--
8076376: Enhance IIOP operations Reviewed-by: rriggs, coffeys, ahgross, skoivu
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
     1
/*
29936
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
     2
 * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
     4
 *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    10
 *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    15
 * accompanied this code).
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    16
 *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    20
 *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    23
 * questions.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    24
 */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    25
/*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    26
 * Licensed Materials - Property of IBM
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    27
 * RMI-IIOP v1.0
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    28
 * Copyright IBM Corp. 1998 1999  All Rights Reserved
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    29
 *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    30
 */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    31
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    32
package com.sun.corba.se.impl.io;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    33
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    34
import java.io.InputStream;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    35
import java.io.IOException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    36
import java.io.StreamCorruptedException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    37
import java.io.ObjectInputValidation;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    38
import java.io.NotActiveException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    39
import java.io.InvalidObjectException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    40
import java.io.InvalidClassException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    41
import java.io.DataInputStream;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    42
import java.io.OptionalDataException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    43
import java.io.WriteAbortedException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    44
import java.io.Externalizable;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    45
import java.io.EOFException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    46
import java.lang.reflect.*;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    47
import java.util.Vector;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    48
import java.util.Stack;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    49
import java.util.Hashtable;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    50
import java.util.Enumeration;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    51
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    52
import sun.corba.Bridge ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    53
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    54
import java.security.AccessController ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    55
import java.security.PrivilegedAction ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    56
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    57
import com.sun.corba.se.impl.io.ObjectStreamClass;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    58
import com.sun.corba.se.impl.util.Utility;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    59
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    60
import org.omg.CORBA.portable.ValueInputStream;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    61
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    62
import org.omg.CORBA.ValueMember;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    63
import org.omg.CORBA.SystemException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    64
import org.omg.CORBA.TCKind;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    65
import org.omg.CORBA.ORB;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    66
import org.omg.CORBA.CompletionStatus;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    67
import org.omg.CORBA.portable.IndirectionException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    68
import org.omg.CORBA.MARSHAL;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    69
import org.omg.CORBA.TypeCode;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    70
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    71
import com.sun.org.omg.CORBA.ValueDefPackage.FullValueDescription;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    72
import com.sun.org.omg.SendingContext.CodeBase;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    73
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    74
import javax.rmi.PortableRemoteObject;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    75
import javax.rmi.CORBA.Util;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    76
import javax.rmi.CORBA.ValueHandler;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    77
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    78
import java.security.*;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    79
import java.util.*;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    80
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    81
import com.sun.corba.se.impl.orbutil.ObjectUtility ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    82
import com.sun.corba.se.impl.logging.OMGSystemException ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    83
import com.sun.corba.se.impl.logging.UtilSystemException ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    84
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    85
import com.sun.corba.se.spi.logging.CORBALogDomains ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    86
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    87
/**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    88
 * IIOPInputStream is used by the ValueHandlerImpl to handle Java serialization
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    89
 * input semantics.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    90
 *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    91
 * @author  Stephen Lewallen
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    92
 * @since   JDK1.1.6
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    93
 */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    94
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    95
public class IIOPInputStream
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    96
    extends com.sun.corba.se.impl.io.InputStreamHook
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    97
{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    98
    private static Bridge bridge =
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
    99
        (Bridge)AccessController.doPrivileged(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   100
            new PrivilegedAction() {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   101
                public Object run() {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   102
                    return Bridge.get() ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   103
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   104
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   105
        ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   106
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   107
    private static OMGSystemException omgWrapper = OMGSystemException.get(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   108
        CORBALogDomains.RPC_ENCODING ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   109
    private static UtilSystemException utilWrapper = UtilSystemException.get(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   110
        CORBALogDomains.RPC_ENCODING ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   111
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   112
    // Necessary to pass the appropriate fields into the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   113
    // defaultReadObjectDelegate method (which takes no
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   114
    // parameters since it's called from
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   115
    // java.io.ObjectInpuStream defaultReadObject()
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   116
    // which we can't change).
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   117
    //
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   118
    // This is only used in the case where the fields had
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   119
    // to be obtained remotely because of a serializable
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   120
    // version difference.  Set in inputObjectUsingFVD.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   121
    // Part of serialization evolution fixes for Ladybird,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   122
    // bug 4365188.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   123
    private ValueMember defaultReadObjectFVDMembers[] = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   124
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   125
    private org.omg.CORBA_2_3.portable.InputStream orbStream;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   126
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   127
    private CodeBase cbSender;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   128
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   129
    private ValueHandlerImpl vhandler;  //d4365188
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   130
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   131
    private Object currentObject = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   132
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   133
    private ObjectStreamClass currentClassDesc = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   134
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   135
    private Class currentClass = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   136
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   137
    private int recursionDepth = 0;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   138
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   139
    private int simpleReadDepth = 0;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   140
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   141
    // The ActiveRecursionManager replaces the old RecursionManager which
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   142
    // used to record how many recursions were made, and resolve them after
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   143
    // an object was completely deserialized.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   144
    //
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   145
    // That created problems (as in bug 4414154) because when custom
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   146
    // unmarshaling in readObject, there can be recursive references
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   147
    // to one of the objects currently being unmarshaled, and the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   148
    // passive recursion system failed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   149
    ActiveRecursionManager activeRecursionMgr = new ActiveRecursionManager();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   150
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   151
    private IOException abortIOException = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   152
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   153
    /* Remember the first exception that stopped this stream. */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   154
    private ClassNotFoundException abortClassNotFoundException = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   155
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   156
    /* Vector of validation callback objects
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   157
     * The vector is created as needed. The vector is maintained in
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   158
     * order of highest (first) priority to lowest
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   159
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   160
    private Vector callbacks;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   161
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   162
    // Serialization machinery fields
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   163
    /* Arrays used to keep track of classes and ObjectStreamClasses
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   164
     * as they are being merged; used in inputObject.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   165
     * spClass is the stack pointer for both.  */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   166
    ObjectStreamClass[] classdesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   167
    Class[] classes;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   168
    int spClass;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   169
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   170
    private static final String kEmptyStr = "";
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   171
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   172
    // TCKind TypeCodes used in FVD inputClassFields
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   173
    //public static final TypeCode kRemoteTypeCode = new TypeCodeImpl(TCKind._tk_objref);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   174
    //public static final TypeCode kValueTypeCode =  new TypeCodeImpl(TCKind._tk_value);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   175
    // removed TypeCodeImpl dependency
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   176
    public static final TypeCode kRemoteTypeCode = ORB.init().get_primitive_tc(TCKind.tk_objref);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   177
    public static final TypeCode kValueTypeCode =  ORB.init().get_primitive_tc(TCKind.tk_value);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   178
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   179
    // TESTING CODE - useFVDOnly should be made final before FCS in order to
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   180
    // optimize out the check.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   181
    private static final boolean useFVDOnly = false;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   182
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   183
    private byte streamFormatVersion;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   184
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   185
    // Since java.io.OptionalDataException's constructors are
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   186
    // package private, but we need to throw it in some special
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   187
    // cases, we try to do it by reflection.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   188
    private static final Constructor OPT_DATA_EXCEPTION_CTOR;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   189
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   190
    private Object[] readObjectArgList = { this } ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   191
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   192
    static {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   193
        OPT_DATA_EXCEPTION_CTOR = getOptDataExceptionCtor();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   194
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   195
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   196
    // Grab the OptionalDataException boolean ctor and make
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   197
    // it accessible.  Note that any exceptions
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   198
    // will be wrapped in ExceptionInInitializerErrors.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   199
    private static Constructor getOptDataExceptionCtor() {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   200
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   201
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   202
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   203
            Constructor result =
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   204
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   205
                (Constructor) AccessController.doPrivileged(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   206
                                    new PrivilegedExceptionAction() {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   207
                    public java.lang.Object run()
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   208
                        throws NoSuchMethodException,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   209
                        SecurityException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   210
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   211
                        Constructor boolCtor
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   212
                            = OptionalDataException.class.getDeclaredConstructor(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   213
                                                               new Class[] {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   214
                                Boolean.TYPE });
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   215
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   216
                        boolCtor.setAccessible(true);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   217
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   218
                        return boolCtor;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   219
                    }});
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   220
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   221
            if (result == null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   222
                // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   223
                throw new Error("Unable to find OptionalDataException constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   224
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   225
            return result;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   226
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   227
        } catch (Exception ex) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   228
            // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   229
            throw new ExceptionInInitializerError(ex);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   230
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   231
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   232
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   233
    // Create a new OptionalDataException with the EOF marker
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   234
    // set to true.  See handleOptionalDataMarshalException.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   235
    private OptionalDataException createOptionalDataException() {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   236
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   237
            OptionalDataException result
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   238
                = (OptionalDataException)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   239
                   OPT_DATA_EXCEPTION_CTOR.newInstance(new Object[] {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   240
                       Boolean.TRUE });
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   241
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   242
            if (result == null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   243
                // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   244
                throw new Error("Created null OptionalDataException");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   245
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   246
            return result;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   247
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   248
        } catch (Exception ex) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   249
            // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   250
            throw new Error("Couldn't create OptionalDataException", ex);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   251
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   252
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   253
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   254
    // Return the stream format version currently being used
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   255
    // to deserialize an object
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   256
    protected byte getStreamFormatVersion() {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   257
        return streamFormatVersion;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   258
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   259
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   260
    // At the beginning of data sent by a writeObject or
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   261
    // writeExternal method there is a byte telling the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   262
    // reader the stream format version.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   263
    private void readFormatVersion() throws IOException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   264
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   265
        streamFormatVersion = orbStream.read_octet();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   266
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   267
        if (streamFormatVersion < 1 ||
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   268
            streamFormatVersion > vhandler.getMaximumStreamFormatVersion()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   269
            SystemException sysex = omgWrapper.unsupportedFormatVersion(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   270
                    CompletionStatus.COMPLETED_MAYBE);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   271
            // XXX I18N?  Logging for IOException?
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   272
            IOException result = new IOException("Unsupported format version: "
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   273
                                                 + streamFormatVersion);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   274
            result.initCause( sysex ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   275
            throw result ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   276
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   277
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   278
        if (streamFormatVersion == 2) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   279
            if (!(orbStream instanceof ValueInputStream)) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   280
                SystemException sysex = omgWrapper.notAValueinputstream(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   281
                    CompletionStatus.COMPLETED_MAYBE);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   282
                // XXX I18N?  Logging for IOException?
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   283
                IOException result = new IOException("Not a ValueInputStream");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   284
                result.initCause( sysex ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   285
                throw result;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   286
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   287
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   288
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   289
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   290
    public static void setTestFVDFlag(boolean val){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   291
        //  useFVDOnly = val;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   292
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   293
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   294
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   295
     * Dummy constructor; passes upper stream a dummy stream;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   296
     **/
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   297
    public IIOPInputStream()
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   298
        throws java.io.IOException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   299
        super();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   300
        resetStream();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   301
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   302
18307
8bf60b58675b 8000642: Better handling of objects for transportation
coffeys
parents: 10924
diff changeset
   303
    final void setOrbStream(org.omg.CORBA_2_3.portable.InputStream os) {
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   304
        orbStream = os;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   305
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   306
18307
8bf60b58675b 8000642: Better handling of objects for transportation
coffeys
parents: 10924
diff changeset
   307
    final org.omg.CORBA_2_3.portable.InputStream getOrbStream() {
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   308
        return orbStream;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   309
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   310
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   311
    //added setSender and getSender
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   312
    public final void setSender(CodeBase cb) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   313
        cbSender = cb;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   314
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   315
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   316
    public final CodeBase getSender() {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   317
        return cbSender;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   318
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   319
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   320
    // 4365188 this is added to enable backward compatability w/ wrong
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   321
    // rep-ids
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   322
    public final void setValueHandler(ValueHandler vh) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   323
        vhandler = (com.sun.corba.se.impl.io.ValueHandlerImpl) vh;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   324
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   325
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   326
    public final ValueHandler getValueHandler() {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   327
        return (javax.rmi.CORBA.ValueHandler) vhandler;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   328
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   329
18307
8bf60b58675b 8000642: Better handling of objects for transportation
coffeys
parents: 10924
diff changeset
   330
    final void increaseRecursionDepth(){
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   331
        recursionDepth++;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   332
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   333
18307
8bf60b58675b 8000642: Better handling of objects for transportation
coffeys
parents: 10924
diff changeset
   334
    final int decreaseRecursionDepth(){
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   335
        return --recursionDepth;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   336
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   337
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   338
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   339
     * Override the actions of the final method "readObject()"
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   340
     * in ObjectInputStream.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   341
     * @since     JDK1.1.6
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   342
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   343
     * Read an object from the ObjectInputStream.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   344
     * The class of the object, the signature of the class, and the values
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   345
     * of the non-transient and non-static fields of the class and all
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   346
     * of its supertypes are read.  Default deserializing for a class can be
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   347
     * overriden using the writeObject and readObject methods.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   348
     * Objects referenced by this object are read transitively so
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   349
     * that a complete equivalent graph of objects is reconstructed by readObject. <p>
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   350
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   351
     * The root object is completly restored when all of its fields
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   352
     * and the objects it references are completely restored.  At this
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   353
     * point the object validation callbacks are executed in order
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   354
     * based on their registered priorities. The callbacks are
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   355
     * registered by objects (in the readObject special methods)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   356
     * as they are individually restored.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   357
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   358
     * Exceptions are thrown for problems with the InputStream and for classes
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   359
     * that should not be deserialized.  All exceptions are fatal to the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   360
     * InputStream and leave it in an indeterminate state; it is up to the caller
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   361
     * to ignore or recover the stream state.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   362
     * @exception java.lang.ClassNotFoundException Class of a serialized object
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   363
     *      cannot be found.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   364
     * @exception InvalidClassException Something is wrong with a class used by
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   365
     *     serialization.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   366
     * @exception StreamCorruptedException Control information in the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   367
     *     stream is inconsistent.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   368
     * @exception OptionalDataException Primitive data was found in the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   369
     * stream instead of objects.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   370
     * @exception IOException Any of the usual Input/Output related exceptions.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   371
     * @since     JDK1.1
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   372
     */
22362
1eb21f1e04c1 8025767: Enhance IIOP Streams
msheppar
parents: 22131
diff changeset
   373
    public final synchronized Object readObjectDelegate() throws IOException
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   374
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   375
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   376
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   377
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   378
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   379
            return orbStream.read_abstract_interface();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   380
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   381
            handleOptionalDataMarshalException(marshalException, true);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   382
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   383
        } catch(IndirectionException cdrie)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   384
            {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   385
                // The CDR stream had never seen the given offset before,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   386
                // so check the recursion manager (it will throw an
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   387
                // IOException if it doesn't have a reference, either).
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   388
                return activeRecursionMgr.getObject(cdrie.offset);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   389
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   390
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   391
22362
1eb21f1e04c1 8025767: Enhance IIOP Streams
msheppar
parents: 22131
diff changeset
   392
    final synchronized Object simpleReadObject(Class clz,
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   393
                                  String repositoryID,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   394
                                  com.sun.org.omg.SendingContext.CodeBase sender,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   395
                                  int offset)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   396
                                         /* throws OptionalDataException, ClassNotFoundException, IOException */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   397
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   398
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   399
        /* Save the current state and get ready to read an object. */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   400
        Object prevObject = currentObject;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   401
        ObjectStreamClass prevClassDesc = currentClassDesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   402
        Class prevClass = currentClass;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   403
        byte oldStreamFormatVersion = streamFormatVersion;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   404
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   405
        simpleReadDepth++;      // Entering
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   406
        Object obj = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   407
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   408
        /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   409
         * Check for reset, handle it before reading an object.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   410
         */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   411
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   412
            // d4365188: backward compatability
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   413
            if (vhandler.useFullValueDescription(clz, repositoryID)) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   414
                obj = inputObjectUsingFVD(clz, repositoryID, sender, offset);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   415
            } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   416
                obj = inputObject(clz, repositoryID, sender, offset);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   417
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   418
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   419
            obj = currentClassDesc.readResolve(obj);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   420
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   421
        catch(ClassNotFoundException cnfe)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   422
            {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   423
                bridge.throwException( cnfe ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   424
                return null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   425
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   426
        catch(IOException ioe)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   427
            {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   428
                // System.out.println("CLZ = " + clz + "; " + ioe.toString());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   429
                bridge.throwException(ioe) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   430
                return null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   431
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   432
        finally {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   433
            simpleReadDepth --;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   434
            currentObject = prevObject;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   435
            currentClassDesc = prevClassDesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   436
            currentClass = prevClass;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   437
            streamFormatVersion = oldStreamFormatVersion;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   438
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   439
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   440
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   441
        /* Check for thrown exceptions and re-throw them, clearing them if
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   442
         * this is the last recursive call .
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   443
         */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   444
        IOException exIOE = abortIOException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   445
        if (simpleReadDepth == 0)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   446
            abortIOException = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   447
        if (exIOE != null){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   448
            bridge.throwException( exIOE ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   449
            return null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   450
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   451
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   452
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   453
        ClassNotFoundException exCNF = abortClassNotFoundException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   454
        if (simpleReadDepth == 0)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   455
            abortClassNotFoundException = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   456
        if (exCNF != null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   457
            bridge.throwException( exCNF ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   458
            return null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   459
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   460
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   461
        return obj;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   462
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   463
22362
1eb21f1e04c1 8025767: Enhance IIOP Streams
msheppar
parents: 22131
diff changeset
   464
    public final synchronized  void simpleSkipObject(String repositoryID,
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   465
                                       com.sun.org.omg.SendingContext.CodeBase sender)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   466
                                       /* throws OptionalDataException, ClassNotFoundException, IOException */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   467
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   468
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   469
        /* Save the current state and get ready to read an object. */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   470
        Object prevObject = currentObject;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   471
        ObjectStreamClass prevClassDesc = currentClassDesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   472
        Class prevClass = currentClass;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   473
        byte oldStreamFormatVersion = streamFormatVersion;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   474
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   475
        simpleReadDepth++;      // Entering
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   476
        Object obj = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   477
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   478
        /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   479
         * Check for reset, handle it before reading an object.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   480
         */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   481
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   482
            skipObjectUsingFVD(repositoryID, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   483
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   484
        catch(ClassNotFoundException cnfe)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   485
            {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   486
                bridge.throwException( cnfe ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   487
                return;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   488
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   489
        catch(IOException ioe)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   490
            {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   491
                bridge.throwException( ioe ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   492
                return;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   493
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   494
        finally {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   495
            simpleReadDepth --;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   496
            streamFormatVersion = oldStreamFormatVersion;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   497
            currentObject = prevObject;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   498
            currentClassDesc = prevClassDesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   499
            currentClass = prevClass;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   500
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   501
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   502
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   503
        /* Check for thrown exceptions and re-throw them, clearing them if
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   504
         * this is the last recursive call .
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   505
         */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   506
        IOException exIOE = abortIOException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   507
        if (simpleReadDepth == 0)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   508
            abortIOException = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   509
        if (exIOE != null){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   510
            bridge.throwException( exIOE ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   511
            return;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   512
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   513
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   514
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   515
        ClassNotFoundException exCNF = abortClassNotFoundException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   516
        if (simpleReadDepth == 0)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   517
            abortClassNotFoundException = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   518
        if (exCNF != null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   519
            bridge.throwException( exCNF ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   520
            return;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   521
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   522
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   523
        return;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   524
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   525
    /////////////////
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   526
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   527
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   528
     * This method is called by trusted subclasses of ObjectOutputStream
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   529
     * that constructed ObjectOutputStream using the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   530
     * protected no-arg constructor. The subclass is expected to provide
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   531
     * an override method with the modifier "final".
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   532
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   533
     * @return the Object read from the stream.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   534
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   535
     * @see #ObjectInputStream()
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   536
     * @see #readObject
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   537
     * @since JDK 1.2
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   538
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   539
    protected final Object readObjectOverride()
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   540
        throws OptionalDataException, ClassNotFoundException, IOException
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   541
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   542
        return readObjectDelegate();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   543
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   544
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   545
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   546
     * Override the actions of the final method "defaultReadObject()"
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   547
     * in ObjectInputStream.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   548
     * @since     JDK1.1.6
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   549
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   550
     * Read the non-static and non-transient fields of the current class
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   551
     * from this stream.  This may only be called from the readObject method
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   552
     * of the class being deserialized. It will throw the NotActiveException
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   553
     * if it is called otherwise.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   554
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   555
     * @exception java.lang.ClassNotFoundException if the class of a serialized
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   556
     *              object could not be found.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   557
     * @exception IOException        if an I/O error occurs.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   558
     * @exception NotActiveException if the stream is not currently reading
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   559
     *              objects.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   560
     * @since     JDK1.1
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   561
     */
22362
1eb21f1e04c1 8025767: Enhance IIOP Streams
msheppar
parents: 22131
diff changeset
   562
    final synchronized void defaultReadObjectDelegate()
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   563
    /* throws IOException, ClassNotFoundException, NotActiveException */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   564
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   565
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   566
            if (currentObject == null || currentClassDesc == null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   567
                // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   568
                throw new NotActiveException("defaultReadObjectDelegate");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   569
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   570
            // The array will be null unless fields were retrieved
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   571
            // remotely because of a serializable version difference.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   572
            // Bug fix for 4365188.  See the definition of
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   573
            // defaultReadObjectFVDMembers for more information.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   574
            if (defaultReadObjectFVDMembers != null &&
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   575
                defaultReadObjectFVDMembers.length > 0) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   576
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   577
                // WARNING:  Be very careful!  What if some of
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   578
                // these fields actually have to do this, too?
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   579
                // This works because the defaultReadObjectFVDMembers
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   580
                // reference is passed to inputClassFields, but
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   581
                // there is no guarantee that
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   582
                // defaultReadObjectFVDMembers will point to the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   583
                // same array after calling inputClassFields.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   584
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   585
                // Use the remote fields to unmarshal.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   586
                inputClassFields(currentObject,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   587
                                 currentClass,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   588
                                 currentClassDesc,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   589
                                 defaultReadObjectFVDMembers,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   590
                                 cbSender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   591
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   592
            } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   593
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   594
                // Use the local fields to unmarshal.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   595
                ObjectStreamField[] fields =
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   596
                    currentClassDesc.getFieldsNoCopy();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   597
                if (fields.length > 0) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   598
                    inputClassFields(currentObject, currentClass, fields, cbSender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   599
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   600
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   601
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   602
        catch(NotActiveException nae)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   603
            {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   604
                bridge.throwException( nae ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   605
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   606
        catch(IOException ioe)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   607
            {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   608
                bridge.throwException( ioe ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   609
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   610
        catch(ClassNotFoundException cnfe)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   611
            {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   612
                bridge.throwException( cnfe ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   613
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   614
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   615
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   616
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   617
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   618
     * Override the actions of the final method "enableResolveObject()"
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   619
     * in ObjectInputStream.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   620
     * @since     JDK1.1.6
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   621
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   622
     * Enable the stream to allow objects read from the stream to be replaced.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   623
     * If the stream is a trusted class it is allowed to enable replacment.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   624
     * Trusted classes are those classes with a classLoader equals null. <p>
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   625
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   626
     * When enabled the resolveObject method is called for every object
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   627
     * being deserialized.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   628
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   629
     * @exception SecurityException The classloader of this stream object is non-null.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   630
     * @since     JDK1.1
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   631
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   632
    public final boolean enableResolveObjectDelegate(boolean enable)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   633
    /* throws SecurityException */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   634
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   635
        return false;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   636
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   637
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   638
    // The following three methods allow the implementing orbStream
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   639
    // to provide mark/reset behavior as defined in java.io.InputStream.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   640
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   641
    public final void mark(int readAheadLimit) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   642
        orbStream.mark(readAheadLimit);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   643
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   644
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   645
    public final boolean markSupported() {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   646
        return orbStream.markSupported();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   647
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   648
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   649
    public final void reset() throws IOException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   650
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   651
            orbStream.reset();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   652
        } catch (Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   653
            IOException err = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   654
            err.initCause(e) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   655
            throw err ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   656
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   657
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   658
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   659
    public final int available() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   660
        return 0; // unreliable
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   661
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   662
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   663
    public final void close() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   664
        // no op
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   665
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   666
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   667
    public final int read() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   668
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   669
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   670
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   671
            return (orbStream.read_octet() << 0) & 0x000000FF;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   672
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   673
            if (marshalException.minor
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   674
                == OMGSystemException.RMIIIOP_OPTIONAL_DATA_INCOMPATIBLE1) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   675
                setState(IN_READ_OBJECT_NO_MORE_OPT_DATA);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   676
                return -1;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   677
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   678
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   679
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   680
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   681
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   682
            exc.initCause(e) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   683
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   684
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   685
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   686
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   687
    public final int read(byte data[], int offset, int length) throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   688
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   689
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   690
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   691
            orbStream.read_octet_array(data, offset, length);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   692
            return length;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   693
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   694
            if (marshalException.minor
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   695
                == OMGSystemException.RMIIIOP_OPTIONAL_DATA_INCOMPATIBLE1) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   696
                setState(IN_READ_OBJECT_NO_MORE_OPT_DATA);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   697
                return -1;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   698
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   699
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   700
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   701
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   702
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   703
            exc.initCause(e) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   704
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   705
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   706
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   707
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   708
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   709
    public final boolean readBoolean() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   710
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   711
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   712
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   713
            return orbStream.read_boolean();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   714
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   715
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   716
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   717
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   718
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   719
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   720
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   721
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   722
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   723
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   724
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   725
    public final byte readByte() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   726
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   727
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   728
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   729
            return orbStream.read_octet();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   730
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   731
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   732
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   733
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   734
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   735
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   736
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   737
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   738
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   739
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   740
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   741
    public final char readChar() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   742
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   743
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   744
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   745
            return orbStream.read_wchar();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   746
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   747
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   748
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   749
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   750
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   751
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   752
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   753
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   754
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   755
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   756
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   757
    public final double readDouble() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   758
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   759
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   760
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   761
            return orbStream.read_double();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   762
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   763
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   764
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   765
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   766
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   767
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   768
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   769
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   770
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   771
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   772
    public final float readFloat() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   773
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   774
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   775
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   776
            return orbStream.read_float();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   777
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   778
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   779
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   780
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   781
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   782
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   783
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   784
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   785
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   786
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   787
    public final void readFully(byte data[]) throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   788
// d11623 : implement readFully, required for serializing some core classes
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   789
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   790
        readFully(data, 0, data.length);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   791
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   792
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   793
    public final void readFully(byte data[],  int offset,  int size) throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   794
// d11623 : implement readFully, required for serializing some core classes
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   795
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   796
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   797
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   798
            orbStream.read_octet_array(data, offset, size);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   799
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   800
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   801
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   802
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   803
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   804
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   805
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   806
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   807
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   808
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   809
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   810
    public final int readInt() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   811
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   812
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   813
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   814
            return orbStream.read_long();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   815
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   816
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   817
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   818
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   819
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   820
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   821
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   822
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   823
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   824
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   825
    public final String readLine() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   826
        // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   827
        throw new IOException("Method readLine not supported");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   828
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   829
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   830
    public final long readLong() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   831
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   832
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   833
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   834
            return orbStream.read_longlong();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   835
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   836
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   837
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   838
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   839
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   840
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   841
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   842
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   843
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   844
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   845
    public final short readShort() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   846
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   847
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   848
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   849
            return orbStream.read_short();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   850
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   851
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   852
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   853
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   854
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   855
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   856
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   857
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   858
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   859
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   860
    protected final void readStreamHeader() throws IOException, StreamCorruptedException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   861
        // no op
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   862
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   863
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   864
    public final int readUnsignedByte() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   865
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   866
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   867
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   868
            return (orbStream.read_octet() << 0) & 0x000000FF;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   869
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   870
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   871
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   872
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   873
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   874
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   875
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   876
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   877
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   878
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   879
    public final int readUnsignedShort() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   880
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   881
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   882
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   883
            return (orbStream.read_ushort() << 0) & 0x0000FFFF;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   884
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   885
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   886
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   887
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   888
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   889
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   890
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   891
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   892
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   893
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   894
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   895
     * Helper method for correcting the Kestrel bug 4367783 (dealing
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   896
     * with larger than 8-bit chars).  The old behavior is preserved
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   897
     * in orbutil.IIOPInputStream_1_3 in order to interoperate with
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   898
     * our legacy ORBs.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   899
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   900
    protected String internalReadUTF(org.omg.CORBA.portable.InputStream stream)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   901
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   902
        return stream.read_wstring();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   903
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   904
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   905
    public final String readUTF() throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   906
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   907
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   908
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   909
            return internalReadUTF(orbStream);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   910
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   911
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   912
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   913
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   914
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   915
            exc.initCause(e);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   916
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   917
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   918
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   919
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   920
    // If the ORB stream detects an incompatibility between what's
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   921
    // on the wire and what our Serializable's readObject wants,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   922
    // it throws a MARSHAL exception with a specific minor code.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   923
    // This is rethrown to the readObject as an OptionalDataException.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   924
    // So far in RMI-IIOP, this process isn't specific enough to
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   925
    // tell the readObject how much data is available, so we always
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   926
    // set the OptionalDataException's EOF marker to true.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   927
    private void handleOptionalDataMarshalException(MARSHAL marshalException,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   928
                                                    boolean objectRead)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   929
        throws IOException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   930
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   931
        // Java Object Serialization spec 3.4: "If the readObject method
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   932
        // of the class attempts to read more data than is present in the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   933
        // optional part of the stream for this class, the stream will
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   934
        // return -1 for bytewise reads, throw an EOFException for
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   935
        // primitive data reads, or throw an OptionalDataException
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   936
        // with the eof field set to true for object reads."
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   937
        if (marshalException.minor
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   938
            == OMGSystemException.RMIIIOP_OPTIONAL_DATA_INCOMPATIBLE1) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   939
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   940
            IOException result;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   941
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   942
            if (!objectRead)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   943
                result = new EOFException("No more optional data");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   944
            else
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   945
                result = createOptionalDataException();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   946
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   947
            result.initCause(marshalException);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   948
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   949
            setState(IN_READ_OBJECT_NO_MORE_OPT_DATA);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   950
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   951
            throw result;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   952
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   953
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   954
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   955
    public final synchronized void registerValidation(ObjectInputValidation obj,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   956
                                                      int prio)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   957
        throws NotActiveException, InvalidObjectException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   958
        // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   959
        throw new Error("Method registerValidation not supported");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   960
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   961
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   962
    protected final Class resolveClass(ObjectStreamClass v)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   963
        throws IOException, ClassNotFoundException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   964
        // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   965
        throw new IOException("Method resolveClass not supported");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   966
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   967
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   968
    protected final Object resolveObject(Object obj) throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   969
        // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   970
        throw new IOException("Method resolveObject not supported");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   971
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   972
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   973
    public final int skipBytes(int len) throws IOException{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   974
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   975
            readObjectState.readData(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   976
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   977
            byte buf[] = new byte[len];
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   978
            orbStream.read_octet_array(buf, 0, len);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   979
            return len;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   980
        } catch (MARSHAL marshalException) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   981
            handleOptionalDataMarshalException(marshalException, false);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   982
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   983
            throw marshalException;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   984
        } catch(Error e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   985
            IOException exc = new IOException(e.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   986
            exc.initCause(e) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   987
            throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   988
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   989
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   990
22362
1eb21f1e04c1 8025767: Enhance IIOP Streams
msheppar
parents: 22131
diff changeset
   991
    private synchronized Object inputObject(Class clz,
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   992
                               String repositoryID,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   993
                               com.sun.org.omg.SendingContext.CodeBase sender,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   994
                               int offset)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   995
        throws IOException, ClassNotFoundException
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   996
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   997
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   998
        /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
   999
         * Get the descriptor and then class of the incoming object.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1000
         */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1001
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1002
        currentClassDesc = ObjectStreamClass.lookup(clz);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1003
        currentClass = currentClassDesc.forClass();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1004
        //currentClassDesc.setClass(currentClass);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1005
        if (currentClass == null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1006
            // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1007
            throw new ClassNotFoundException(currentClassDesc.getName());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1008
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1009
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1010
            /* If Externalizable,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1011
             *  Create an instance and tell it to read its data.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1012
             * else,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1013
             *  Handle it as a serializable class.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1014
             */
7196
41f71f4690d5 6277781: Serialization of Enums over IIOP is broke.
robm
parents: 7063
diff changeset
  1015
            if (Enum.class.isAssignableFrom( clz )) {
41f71f4690d5 6277781: Serialization of Enums over IIOP is broke.
robm
parents: 7063
diff changeset
  1016
                int ordinal = orbStream.read_long() ;
41f71f4690d5 6277781: Serialization of Enums over IIOP is broke.
robm
parents: 7063
diff changeset
  1017
                String value = (String)orbStream.read_value( String.class ) ;
41f71f4690d5 6277781: Serialization of Enums over IIOP is broke.
robm
parents: 7063
diff changeset
  1018
                return Enum.valueOf( clz, value ) ;
41f71f4690d5 6277781: Serialization of Enums over IIOP is broke.
robm
parents: 7063
diff changeset
  1019
            } else if (currentClassDesc.isExternalizable()) {
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1020
                try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1021
                    currentObject = (currentClass == null) ?
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1022
                        null : currentClassDesc.newInstance();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1023
                    if (currentObject != null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1024
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1025
                        // Store this object and its beginning position
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1026
                        // since there might be indirections to it while
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1027
                        // it's been unmarshalled.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1028
                        activeRecursionMgr.addObject(offset, currentObject);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1029
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1030
                        // Read format version
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1031
                        readFormatVersion();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1032
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1033
                        Externalizable ext = (Externalizable)currentObject;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1034
                        ext.readExternal(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1035
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1036
            } catch (InvocationTargetException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1037
                InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1038
                    currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1039
                    "InvocationTargetException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1040
                exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1041
                throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1042
            } catch (UnsupportedOperationException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1043
                InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1044
                    currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1045
                    "UnsupportedOperationException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1046
                exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1047
                throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1048
            } catch (InstantiationException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1049
                InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1050
                    currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1051
                    "InstantiationException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1052
                exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1053
                throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1054
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1055
        } // end : if (currentClassDesc.isExternalizable())
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1056
        else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1057
            /* Count number of classes and descriptors we might have
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1058
             * to work on.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1059
             */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1060
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1061
            ObjectStreamClass currdesc = currentClassDesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1062
            Class currclass = currentClass;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1063
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1064
            int spBase = spClass;       // current top of stack
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1065
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1066
            /* The object's classes should be processed from supertype to subtype
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1067
             * Push all the clases of the current object onto a stack.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1068
             * Note that only the serializable classes are represented
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1069
             * in the descriptor list.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1070
             *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1071
             * Handle versioning where one or more supertypes of
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1072
             * have been inserted or removed.  The stack will
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1073
             * contain pairs of descriptors and the corresponding
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1074
             * class.  If the object has a class that did not occur in
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1075
             * the original the descriptor will be null.  If the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1076
             * original object had a descriptor for a class not
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1077
             * present in the local hierarchy of the object the class will be
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1078
             * null.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1079
             *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1080
             */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1081
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1082
            /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1083
             * This is your basic diff pattern, made simpler
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1084
             * because reordering is not allowed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1085
             */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1086
            // sun.4296963 ibm.11861
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1087
            // d11861 we should stop when we find the highest serializable class
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1088
            // We need this so that when we allocate the new object below, we
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1089
            // can call the constructor of the non-serializable superclass.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1090
            // Note that in the JRMP variant of this code the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1091
            // ObjectStreamClass.lookup() method handles this, but we've put
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1092
            // this fix here rather than change lookup because the new behaviour
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1093
            // is needed in other cases.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1094
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1095
            for (currdesc = currentClassDesc, currclass = currentClass;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1096
                 currdesc != null && currdesc.isSerializable();   /*sun.4296963 ibm.11861*/
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1097
                 currdesc = currdesc.getSuperclass()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1098
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1099
                /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1100
                 * Search the classes to see if the class of this
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1101
                 * descriptor appears further up the hierarchy. Until
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1102
                 * it's found assume its an inserted class.  If it's
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1103
                 * not found, its the descriptor's class that has been
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1104
                 * removed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1105
                 */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1106
                Class cc = currdesc.forClass();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1107
                Class cl;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1108
                for (cl = currclass; cl != null; cl = cl.getSuperclass()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1109
                    if (cc == cl) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1110
                        // found a superclass that matches this descriptor
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1111
                        break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1112
                    } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1113
                        /* Ignore a class that doesn't match.  No
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1114
                         * action is needed since it is already
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1115
                         * initialized.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1116
                         */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1117
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1118
                } // end : for (cl = currclass; cl != null; cl = cl.getSuperclass())
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1119
                /* Test if there is room for this new entry.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1120
                 * If not, double the size of the arrays and copy the contents.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1121
                 */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1122
                spClass++;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1123
                if (spClass >= classes.length) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1124
                    int newlen = classes.length * 2;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1125
                    Class[] newclasses = new Class[newlen];
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1126
                    ObjectStreamClass[] newclassdesc = new ObjectStreamClass[newlen];
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1127
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1128
                    System.arraycopy(classes, 0,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1129
                                     newclasses, 0,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1130
                                     classes.length);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1131
                    System.arraycopy(classdesc, 0,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1132
                                     newclassdesc, 0,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1133
                                     classes.length);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1134
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1135
                    classes = newclasses;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1136
                    classdesc = newclassdesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1137
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1138
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1139
                if (cl == null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1140
                    /* Class not found corresponding to this descriptor.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1141
                     * Pop off all the extra classes pushed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1142
                     * Push the descriptor and a null class.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1143
                     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1144
                    classdesc[spClass] = currdesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1145
                    classes[spClass] = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1146
                } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1147
                    /* Current class descriptor matches current class.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1148
                     * Some classes may have been inserted.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1149
                     * Record the match and advance the class, continue
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1150
                     * with the next descriptor.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1151
                     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1152
                    classdesc[spClass] = currdesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1153
                    classes[spClass] = cl;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1154
                    currclass = cl.getSuperclass();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1155
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1156
            } // end : for (currdesc = currentClassDesc, currclass = currentClass;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1157
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1158
            /* Allocate a new object.  The object is only constructed
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1159
             * above the highest serializable class and is set to
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1160
             * default values for all more specialized classes.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1161
             */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1162
            try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1163
                currentObject = (currentClass == null) ?
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1164
                    null : currentClassDesc.newInstance() ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1165
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1166
                // Store this object and its beginning position
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1167
                // since there might be indirections to it while
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1168
                // it's been unmarshalled.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1169
                activeRecursionMgr.addObject(offset, currentObject);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1170
            } catch (InvocationTargetException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1171
                InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1172
                    currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1173
                    "InvocationTargetException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1174
                exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1175
                throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1176
            } catch (UnsupportedOperationException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1177
                InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1178
                    currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1179
                    "UnsupportedOperationException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1180
                exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1181
                throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1182
            } catch (InstantiationException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1183
                InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1184
                    currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1185
                    "InstantiationException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1186
                exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1187
                throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1188
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1189
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1190
            /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1191
             * For all the pushed descriptors and classes.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1192
             *  if the class has its own writeObject and readObject methods
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1193
             *      call the readObject method
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1194
             *  else
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1195
             *      invoke the defaultReadObject method
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1196
             */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1197
            try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1198
                for (spClass = spClass; spClass > spBase; spClass--) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1199
                    /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1200
                     * Set current descriptor and corresponding class
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1201
                     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1202
                    currentClassDesc = classdesc[spClass];
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1203
                    currentClass = classes[spClass];
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1204
                    if (classes[spClass] != null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1205
                        /* Read the data from the stream described by the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1206
                         * descriptor and store into the matching class.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1207
                         */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1208
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1209
                        ReadObjectState oldState = readObjectState;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1210
                        setState(DEFAULT_STATE);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1211
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1212
                        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1213
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1214
                            // Changed since invokeObjectReader no longer does this.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1215
                            if (currentClassDesc.hasWriteObject()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1216
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1217
                                // Read format version
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1218
                                readFormatVersion();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1219
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1220
                                // Read defaultWriteObject indicator
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1221
                                boolean calledDefaultWriteObject = readBoolean();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1222
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1223
                                readObjectState.beginUnmarshalCustomValue(this,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1224
                                                                          calledDefaultWriteObject,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1225
                                                                          (currentClassDesc.readObjectMethod
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1226
                                                                           != null));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1227
                            } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1228
                                if (currentClassDesc.hasReadObject())
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1229
                                    setState(IN_READ_OBJECT_REMOTE_NOT_CUSTOM_MARSHALED);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1230
                            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1231
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1232
                            if (!invokeObjectReader(currentClassDesc, currentObject, currentClass) ||
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1233
                                readObjectState == IN_READ_OBJECT_DEFAULTS_SENT) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1234
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1235
                                // Error case of no readObject and didn't call
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1236
                                // defaultWriteObject handled in default state
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1237
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1238
                                ObjectStreamField[] fields =
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1239
                                    currentClassDesc.getFieldsNoCopy();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1240
                                if (fields.length > 0) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1241
                                    inputClassFields(currentObject, currentClass, fields, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1242
                                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1243
                            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1244
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1245
                            if (currentClassDesc.hasWriteObject())
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1246
                                readObjectState.endUnmarshalCustomValue(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1247
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1248
                        } finally {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1249
                            setState(oldState);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1250
                        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1251
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1252
                    } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1253
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1254
                        // _REVISIT_ : Can we ever get here?
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1255
                        /* No local class for this descriptor,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1256
                         * Skip over the data for this class.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1257
                         * like defaultReadObject with a null currentObject.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1258
                         * The code will read the values but discard them.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1259
                         */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1260
                            ObjectStreamField[] fields =
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1261
                                currentClassDesc.getFieldsNoCopy();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1262
                            if (fields.length > 0) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1263
                                inputClassFields(null, currentClass, fields, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1264
                            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1265
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1266
                        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1267
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1268
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1269
            } finally {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1270
                                // Make sure we exit at the same stack level as when we started.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1271
                spClass = spBase;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1272
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1273
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1274
        } finally {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1275
            // We've completed deserializing this object.  Any
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1276
            // future indirections will be handled correctly at the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1277
            // CDR level.  The ActiveRecursionManager only deals with
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1278
            // objects currently being deserialized.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1279
            activeRecursionMgr.removeObject(offset);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1280
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1281
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1282
        return currentObject;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1283
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1284
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1285
    // This retrieves a vector of FVD's for the hierarchy of serializable classes stemming from
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1286
    // repositoryID.  It is assumed that the sender will not provide base_value id's for non-serializable
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1287
    // classes!
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1288
    private Vector getOrderedDescriptions(String repositoryID,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1289
                                          com.sun.org.omg.SendingContext.CodeBase sender) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1290
        Vector descs = new Vector();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1291
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1292
        if (sender == null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1293
            return descs;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1294
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1295
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1296
        FullValueDescription aFVD = sender.meta(repositoryID);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1297
        while (aFVD != null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1298
            descs.insertElementAt(aFVD, 0);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1299
            if ((aFVD.base_value != null) && !kEmptyStr.equals(aFVD.base_value)) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1300
                aFVD = sender.meta(aFVD.base_value);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1301
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1302
            else return descs;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1303
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1304
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1305
        return descs;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1306
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1307
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1308
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1309
     * This input method uses FullValueDescriptions retrieved from the sender's runtime to
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1310
     * read in the data.  This method is capable of throwing out data not applicable to client's fields.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1311
     * This method handles instances where the reader has a class not sent by the sender, the sender sent
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1312
     * a class not present on the reader, and/or the reader's class does not match the sender's class.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1313
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1314
     * NOTE : If the local description indicates custom marshaling and the remote type's FVD also
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1315
     * indicates custom marsahling than the local type is used to read the data off the wire.  However,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1316
     * if either says custom while the other does not, a MARSHAL error is thrown.  Externalizable is
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1317
     * a form of custom marshaling.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1318
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1319
     */
22362
1eb21f1e04c1 8025767: Enhance IIOP Streams
msheppar
parents: 22131
diff changeset
  1320
    private synchronized Object inputObjectUsingFVD(Class clz,
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1321
                                       String repositoryID,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1322
                                       com.sun.org.omg.SendingContext.CodeBase sender,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1323
                                       int offset)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1324
        throws IOException, ClassNotFoundException
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1325
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1326
        int spBase = spClass;   // current top of stack
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1327
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1328
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1329
            /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1330
             * Get the descriptor and then class of the incoming object.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1331
             */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1332
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1333
            ObjectStreamClass currdesc = currentClassDesc = ObjectStreamClass.lookup(clz);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1334
            Class currclass = currentClass = clz;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1335
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1336
            /* If Externalizable,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1337
             *  Create an instance and tell it to read its data.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1338
             * else,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1339
             *  Handle it as a serializable class.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1340
             */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1341
            if (currentClassDesc.isExternalizable()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1342
                try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1343
                    currentObject = (currentClass == null) ?
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1344
                        null : currentClassDesc.newInstance();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1345
                    if (currentObject != null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1346
                        // Store this object and its beginning position
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1347
                        // since there might be indirections to it while
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1348
                        // it's been unmarshalled.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1349
                        activeRecursionMgr.addObject(offset, currentObject);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1350
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1351
                        // Read format version
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1352
                        readFormatVersion();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1353
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1354
                        Externalizable ext = (Externalizable)currentObject;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1355
                        ext.readExternal(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1356
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1357
                } catch (InvocationTargetException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1358
                    InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1359
                        currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1360
                        "InvocationTargetException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1361
                    exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1362
                    throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1363
                } catch (UnsupportedOperationException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1364
                    InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1365
                        currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1366
                        "UnsupportedOperationException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1367
                    exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1368
                    throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1369
                } catch (InstantiationException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1370
                    InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1371
                        currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1372
                        "InstantiationException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1373
                    exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1374
                    throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1375
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1376
            } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1377
                /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1378
                 * This is your basic diff pattern, made simpler
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1379
                 * because reordering is not allowed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1380
                 */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1381
                for (currdesc = currentClassDesc, currclass = currentClass;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1382
                     currdesc != null && currdesc.isSerializable();   /*sun.4296963 ibm.11861*/
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1383
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1384
                     currdesc = currdesc.getSuperclass()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1385
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1386
                    /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1387
                     * Search the classes to see if the class of this
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1388
                     * descriptor appears further up the hierarchy. Until
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1389
                     * it's found assume its an inserted class.  If it's
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1390
                     * not found, its the descriptor's class that has been
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1391
                     * removed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1392
                     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1393
                    Class cc = currdesc.forClass();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1394
                    Class cl;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1395
                    for (cl = currclass; cl != null; cl = cl.getSuperclass()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1396
                        if (cc == cl) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1397
                            // found a superclass that matches this descriptor
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1398
                            break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1399
                        } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1400
                            /* Ignore a class that doesn't match.  No
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1401
                             * action is needed since it is already
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1402
                             * initialized.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1403
                             */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1404
                        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1405
                    } // end : for (cl = currclass; cl != null; cl = cl.getSuperclass())
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1406
                    /* Test if there is room for this new entry.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1407
                     * If not, double the size of the arrays and copy the contents.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1408
                     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1409
                    spClass++;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1410
                    if (spClass >= classes.length) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1411
                        int newlen = classes.length * 2;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1412
                        Class[] newclasses = new Class[newlen];
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1413
                        ObjectStreamClass[] newclassdesc = new ObjectStreamClass[newlen];
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1414
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1415
                        System.arraycopy(classes, 0,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1416
                                         newclasses, 0,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1417
                                         classes.length);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1418
                        System.arraycopy(classdesc, 0,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1419
                                         newclassdesc, 0,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1420
                                         classes.length);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1421
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1422
                        classes = newclasses;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1423
                        classdesc = newclassdesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1424
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1425
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1426
                    if (cl == null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1427
                        /* Class not found corresponding to this descriptor.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1428
                         * Pop off all the extra classes pushed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1429
                         * Push the descriptor and a null class.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1430
                         */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1431
                        classdesc[spClass] = currdesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1432
                        classes[spClass] = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1433
                    } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1434
                        /* Current class descriptor matches current class.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1435
                         * Some classes may have been inserted.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1436
                         * Record the match and advance the class, continue
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1437
                         * with the next descriptor.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1438
                         */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1439
                        classdesc[spClass] = currdesc;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1440
                        classes[spClass] = cl;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1441
                        currclass = cl.getSuperclass();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1442
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1443
                } // end : for (currdesc = currentClassDesc, currclass = currentClass;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1444
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1445
                /* Allocate a new object.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1446
                 */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1447
                try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1448
                    currentObject = (currentClass == null) ?
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1449
                        null : currentClassDesc.newInstance();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1450
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1451
                    // Store this object and its beginning position
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1452
                    // since there might be indirections to it while
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1453
                    // it's been unmarshalled.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1454
                    activeRecursionMgr.addObject(offset, currentObject);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1455
                } catch (InvocationTargetException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1456
                    InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1457
                        currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1458
                        "InvocationTargetException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1459
                    exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1460
                    throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1461
                } catch (UnsupportedOperationException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1462
                    InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1463
                        currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1464
                        "UnsupportedOperationException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1465
                    exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1466
                    throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1467
                } catch (InstantiationException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1468
                    InvalidClassException exc = new InvalidClassException(
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1469
                        currentClass.getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1470
                        "InstantiationException accessing no-arg constructor");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1471
                    exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1472
                    throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1473
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1474
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1475
                Enumeration fvdsList = getOrderedDescriptions(repositoryID, sender).elements();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1476
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1477
                while((fvdsList.hasMoreElements()) && (spClass > spBase)) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1478
                    FullValueDescription fvd = (FullValueDescription)fvdsList.nextElement();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1479
                    // d4365188: backward compatability
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1480
                    String repIDForFVD = vhandler.getClassName(fvd.id);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1481
                    String repIDForClass = vhandler.getClassName(vhandler.getRMIRepositoryID(currentClass));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1482
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1483
                    while ((spClass > spBase) &&
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1484
                           (!repIDForFVD.equals(repIDForClass))) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1485
                        int pos = findNextClass(repIDForFVD, classes, spClass, spBase);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1486
                        if (pos != -1) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1487
                            spClass = pos;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1488
                            currclass = currentClass = classes[spClass];
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1489
                            repIDForClass = vhandler.getClassName(vhandler.getRMIRepositoryID(currentClass));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1490
                        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1491
                        else { // Read and throw away one level of the fvdslist
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1492
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1493
                            // This seems to mean that the sender had a superclass that
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1494
                            // we don't have
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1495
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1496
                            if (fvd.is_custom) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1497
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1498
                                readFormatVersion();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1499
                                boolean calledDefaultWriteObject = readBoolean();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1500
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1501
                                if (calledDefaultWriteObject)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1502
                                    inputClassFields(null, null, null, fvd.members, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1503
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1504
                                if (getStreamFormatVersion() == 2) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1505
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1506
                                    ((ValueInputStream)getOrbStream()).start_value();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1507
                                    ((ValueInputStream)getOrbStream()).end_value();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1508
                                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1509
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1510
                                // WARNING: If stream format version is 1 and there's
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1511
                                // optional data, we'll get some form of exception down
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1512
                                // the line or data corruption.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1513
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1514
                            } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1515
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1516
                                inputClassFields(null, currentClass, null, fvd.members, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1517
                            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1518
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1519
                            if (fvdsList.hasMoreElements()){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1520
                                fvd = (FullValueDescription)fvdsList.nextElement();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1521
                                repIDForFVD = vhandler.getClassName(fvd.id);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1522
                            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1523
                            else return currentObject;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1524
                        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1525
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1526
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1527
                    currdesc = currentClassDesc = ObjectStreamClass.lookup(currentClass);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1528
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1529
                    if (!repIDForClass.equals("java.lang.Object")) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1530
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1531
                        // If the sender used custom marshaling, then it should have put
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1532
                        // the two bytes on the wire indicating stream format version
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1533
                        // and whether or not the writeObject method called
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1534
                        // defaultWriteObject/writeFields.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1535
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1536
                        ReadObjectState oldState = readObjectState;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1537
                        setState(DEFAULT_STATE);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1538
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1539
                        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1540
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1541
                            if (fvd.is_custom) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1542
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1543
                                // Read format version
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1544
                                readFormatVersion();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1545
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1546
                                // Read defaultWriteObject indicator
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1547
                                boolean calledDefaultWriteObject = readBoolean();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1548
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1549
                                readObjectState.beginUnmarshalCustomValue(this,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1550
                                                                          calledDefaultWriteObject,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1551
                                                                          (currentClassDesc.readObjectMethod
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1552
                                                                           != null));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1553
                            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1554
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1555
                            boolean usedReadObject = false;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1556
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1557
                            // Always use readObject if it exists, and fall back to default
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1558
                            // unmarshaling if it doesn't.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1559
                            try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1560
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1561
                                if (!fvd.is_custom && currentClassDesc.hasReadObject())
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1562
                                    setState(IN_READ_OBJECT_REMOTE_NOT_CUSTOM_MARSHALED);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1563
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1564
                                // See the definition of defaultReadObjectFVDMembers
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1565
                                // for more information.  This concerns making sure
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1566
                                // we use the remote FVD's members in defaultReadObject.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1567
                                defaultReadObjectFVDMembers = fvd.members;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1568
                                usedReadObject = invokeObjectReader(currentClassDesc,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1569
                                                                    currentObject,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1570
                                                                    currentClass);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1571
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1572
                            } finally {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1573
                                defaultReadObjectFVDMembers = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1574
                            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1575
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1576
                            // Note that the !usedReadObject !calledDefaultWriteObject
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1577
                            // case is handled by the beginUnmarshalCustomValue method
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1578
                            // of the default state
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1579
                            if (!usedReadObject || readObjectState == IN_READ_OBJECT_DEFAULTS_SENT)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1580
                                inputClassFields(currentObject, currentClass, currdesc, fvd.members, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1581
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1582
                            if (fvd.is_custom)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1583
                                readObjectState.endUnmarshalCustomValue(this);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1584
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1585
                        } finally {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1586
                            setState(oldState);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1587
                        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1588
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1589
                        currclass = currentClass = classes[--spClass];
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1590
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1591
                    } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1592
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1593
                        // The remaining hierarchy of the local class does not match the sender's FVD.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1594
                        // So, use remaining FVDs to read data off wire.  If any remaining FVDs indicate
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1595
                        // custom marshaling, throw MARSHAL error.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1596
                        inputClassFields(null, currentClass, null, fvd.members, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1597
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1598
                        while (fvdsList.hasMoreElements()){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1599
                            fvd = (FullValueDescription)fvdsList.nextElement();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1600
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1601
                            if (fvd.is_custom)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1602
                                skipCustomUsingFVD(fvd.members, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1603
                            else
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1604
                                inputClassFields(null, currentClass, null, fvd.members, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1605
                        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1606
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1607
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1608
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1609
                } // end : while(fvdsList.hasMoreElements())
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1610
                while (fvdsList.hasMoreElements()){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1611
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1612
                    FullValueDescription fvd = (FullValueDescription)fvdsList.nextElement();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1613
                    if (fvd.is_custom)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1614
                        skipCustomUsingFVD(fvd.members, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1615
                    else
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1616
                        throwAwayData(fvd.members, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1617
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1618
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1619
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1620
            return currentObject;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1621
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1622
        finally {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1623
                // Make sure we exit at the same stack level as when we started.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1624
                spClass = spBase;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1625
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1626
                // We've completed deserializing this object.  Any
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1627
                // future indirections will be handled correctly at the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1628
                // CDR level.  The ActiveRecursionManager only deals with
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1629
                // objects currently being deserialized.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1630
                activeRecursionMgr.removeObject(offset);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1631
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1632
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1633
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1634
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1635
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1636
     * This input method uses FullValueDescriptions retrieved from the sender's runtime to
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1637
     * read in the data.  This method is capable of throwing out data not applicable to client's fields.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1638
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1639
     * NOTE : If the local description indicates custom marshaling and the remote type's FVD also
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1640
     * indicates custom marsahling than the local type is used to read the data off the wire.  However,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1641
     * if either says custom while the other does not, a MARSHAL error is thrown.  Externalizable is
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1642
     * a form of custom marshaling.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1643
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1644
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1645
    private Object skipObjectUsingFVD(String repositoryID,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1646
                                      com.sun.org.omg.SendingContext.CodeBase sender)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1647
        throws IOException, ClassNotFoundException
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1648
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1649
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1650
        Enumeration fvdsList = getOrderedDescriptions(repositoryID, sender).elements();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1651
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1652
        while(fvdsList.hasMoreElements()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1653
            FullValueDescription fvd = (FullValueDescription)fvdsList.nextElement();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1654
            String repIDForFVD = vhandler.getClassName(fvd.id);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1655
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1656
            if (!repIDForFVD.equals("java.lang.Object")) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1657
                if (fvd.is_custom) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1658
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1659
                    readFormatVersion();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1660
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1661
                    boolean calledDefaultWriteObject = readBoolean();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1662
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1663
                    if (calledDefaultWriteObject)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1664
                        inputClassFields(null, null, null, fvd.members, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1665
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1666
                    if (getStreamFormatVersion() == 2) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1667
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1668
                        ((ValueInputStream)getOrbStream()).start_value();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1669
                        ((ValueInputStream)getOrbStream()).end_value();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1670
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1671
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1672
                    // WARNING: If stream format version is 1 and there's
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1673
                    // optional data, we'll get some form of exception down
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1674
                    // the line.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1675
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1676
                } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1677
                    // Use default marshaling
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1678
                    inputClassFields(null, null, null, fvd.members, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1679
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1680
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1681
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1682
        } // end : while(fvdsList.hasMoreElements())
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1683
        return null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1684
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1685
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1686
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1687
    ///////////////////
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1688
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1689
    private int findNextClass(String classname, Class classes[], int _spClass, int _spBase){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1690
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1691
        for (int i = _spClass; i > _spBase; i--){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1692
            if (classname.equals(classes[i].getName())) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1693
                return i;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1694
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1695
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1696
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1697
        return -1;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1698
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1699
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1700
    /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1701
     * Invoke the readObject method if present.  Assumes that in the case of custom
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1702
     * marshaling, the format version and defaultWriteObject indicator were already
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1703
     * removed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1704
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1705
    private boolean invokeObjectReader(ObjectStreamClass osc, Object obj, Class aclass)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1706
        throws InvalidClassException, StreamCorruptedException,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1707
               ClassNotFoundException, IOException
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1708
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1709
        if (osc.readObjectMethod == null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1710
            return false;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1711
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1712
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1713
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1714
            osc.readObjectMethod.invoke( obj, readObjectArgList ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1715
            return true;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1716
        } catch (InvocationTargetException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1717
            Throwable t = e.getTargetException();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1718
            if (t instanceof ClassNotFoundException)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1719
                throw (ClassNotFoundException)t;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1720
            else if (t instanceof IOException)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1721
                throw (IOException)t;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1722
            else if (t instanceof RuntimeException)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1723
                throw (RuntimeException) t;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1724
            else if (t instanceof Error)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1725
                throw (Error) t;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1726
            else
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1727
                // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1728
                throw new Error("internal error");
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1729
        } catch (IllegalAccessException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1730
            return false;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1731
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1732
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1733
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1734
    /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1735
     * Reset the stream to be just like it was after the constructor.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1736
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1737
    private void resetStream() throws IOException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1738
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1739
        if (classes == null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1740
            classes = new Class[20];
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1741
        else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1742
            for (int i = 0; i < classes.length; i++)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1743
                classes[i] = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1744
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1745
        if (classdesc == null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1746
            classdesc = new ObjectStreamClass[20];
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1747
        else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1748
            for (int i = 0; i < classdesc.length; i++)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1749
                classdesc[i] = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1750
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1751
        spClass = 0;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1752
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1753
        if (callbacks != null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1754
            callbacks.setSize(0);       // discard any pending callbacks
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1755
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1756
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1757
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1758
     * Factored out of inputClassFields  This reads a primitive value and sets it
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1759
     * in the field of o described by the ObjectStreamField field.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1760
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1761
     * Note that reflection cannot be used here, because reflection cannot be used
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1762
     * to set final fields.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1763
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1764
    private void inputPrimitiveField(Object o, Class cl, ObjectStreamField field)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1765
        throws InvalidClassException, IOException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1766
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1767
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1768
            switch (field.getTypeCode()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1769
                case 'B':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1770
                    byte byteValue = orbStream.read_octet();
29936
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1771
                    if (field.getField() != null) {
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1772
                        bridge.putByte( o, field.getFieldID(), byteValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1773
                        //reflective code: field.getField().setByte( o, byteValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1774
                    }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1775
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1776
                case 'Z':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1777
                    boolean booleanValue = orbStream.read_boolean();
29936
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1778
                    if (field.getField() != null) {
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1779
                        bridge.putBoolean( o, field.getFieldID(), booleanValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1780
                        //reflective code: field.getField().setBoolean( o, booleanValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1781
                    }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1782
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1783
                case 'C':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1784
                    char charValue = orbStream.read_wchar();
29936
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1785
                    if (field.getField() != null) {
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1786
                        bridge.putChar( o, field.getFieldID(), charValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1787
                        //reflective code: field.getField().setChar( o, charValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1788
                    }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1789
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1790
                case 'S':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1791
                    short shortValue = orbStream.read_short();
29936
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1792
                    if (field.getField() != null) {
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1793
                        bridge.putShort( o, field.getFieldID(), shortValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1794
                        //reflective code: field.getField().setShort( o, shortValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1795
                    }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1796
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1797
                case 'I':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1798
                    int intValue = orbStream.read_long();
29936
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1799
                    if (field.getField() != null) {
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1800
                        bridge.putInt( o, field.getFieldID(), intValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1801
                        //reflective code: field.getField().setInt( o, intValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1802
                    }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1803
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1804
                case 'J':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1805
                    long longValue = orbStream.read_longlong();
29936
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1806
                    if (field.getField() != null) {
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1807
                        bridge.putLong( o, field.getFieldID(), longValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1808
                        //reflective code: field.getField().setLong( o, longValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1809
                    }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1810
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1811
                case 'F' :
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1812
                    float floatValue = orbStream.read_float();
29936
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1813
                    if (field.getField() != null) {
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1814
                        bridge.putFloat( o, field.getFieldID(), floatValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1815
                        //reflective code: field.getField().setFloat( o, floatValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1816
                    }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1817
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1818
                case 'D' :
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1819
                    double doubleValue = orbStream.read_double();
29936
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1820
                    if (field.getField() != null) {
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1821
                        bridge.putDouble( o, field.getFieldID(), doubleValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1822
                        //reflective code: field.getField().setDouble( o, doubleValue ) ;
9edf96e1b418 8068721: RMI-IIOP communication fails when ConcurrentHashMap is passed to remote method
msheppar
parents: 25862
diff changeset
  1823
                    }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1824
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1825
                default:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1826
                    // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1827
                    throw new InvalidClassException(cl.getName());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1828
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1829
        } catch (IllegalArgumentException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1830
            /* This case should never happen. If the field types
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1831
               are not the same, InvalidClassException is raised when
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1832
               matching the local class to the serialized ObjectStreamClass. */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1833
            ClassCastException cce = new ClassCastException("Assigning instance of class " +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1834
                                         field.getType().getName() +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1835
                                         " to field " +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1836
                                         currentClassDesc.getName() + '#' +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1837
                                         field.getField().getName());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1838
            cce.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1839
            throw cce ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1840
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1841
     }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1842
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1843
    private Object inputObjectField(org.omg.CORBA.ValueMember field,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1844
                                    com.sun.org.omg.SendingContext.CodeBase sender)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1845
        throws IndirectionException, ClassNotFoundException, IOException,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1846
               StreamCorruptedException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1847
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1848
        Object objectValue = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1849
        Class type = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1850
        String id = field.id;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1851
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1852
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1853
            type = vhandler.getClassFromType(id);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1854
        } catch(ClassNotFoundException cnfe) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1855
            // Make sure type = null
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1856
            type = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1857
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1858
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1859
        String signature = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1860
        if (type != null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1861
            signature = ValueUtility.getSignature(field);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1862
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1863
        if (signature != null && (signature.equals("Ljava/lang/Object;") ||
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1864
                                  signature.equals("Ljava/io/Serializable;") ||
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1865
                                  signature.equals("Ljava/io/Externalizable;"))) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1866
            objectValue = javax.rmi.CORBA.Util.readAny(orbStream);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1867
        } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1868
            // Decide what method call to make based on the type. If
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1869
            // it is a type for which we need to load a stub, convert
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1870
            // the type to the correct stub type.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1871
            //
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1872
            // NOTE : Since FullValueDescription does not allow us
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1873
            // to ask whether something is an interface we do not
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1874
            // have the ability to optimize this check.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1875
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1876
            int callType = ValueHandlerImpl.kValueType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1877
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1878
            if (!vhandler.isSequence(id)) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1879
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1880
                if (field.type.kind().value() == kRemoteTypeCode.kind().value()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1881
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1882
                    // RMI Object reference...
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1883
                    callType = ValueHandlerImpl.kRemoteType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1884
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1885
                } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1886
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1887
                    // REVISIT.  If we don't have the local class,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1888
                    // we should probably verify that it's an RMI type,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1889
                    // query the remote FVD, and use is_abstract.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1890
                    // Our FVD seems to get NullPointerExceptions for any
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1891
                    // non-RMI types.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1892
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1893
                    // This uses the local class in the same way as
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1894
                    // inputObjectField(ObjectStreamField) does.  REVISIT
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1895
                    // inputObjectField(ObjectStreamField)'s loadStubClass
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1896
                    // logic.  Assumption is that the given type cannot
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1897
                    // evolve to become a CORBA abstract interface or
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1898
                    // a RMI abstract interface.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1899
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1900
                    if (type != null && type.isInterface() &&
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1901
                        (vhandler.isAbstractBase(type) ||
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1902
                         ObjectStreamClassCorbaExt.isAbstractInterface(type))) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1903
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1904
                        callType = ValueHandlerImpl.kAbstractType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1905
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1906
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1907
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1908
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1909
            // Now that we have used the FVD of the field to determine the proper course
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1910
            // of action, it is ok to use the type (Class) from this point forward since
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1911
            // the rep. id for this read will also follow on the wire.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1912
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1913
            switch (callType) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1914
                case ValueHandlerImpl.kRemoteType:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1915
                    if (type != null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1916
                        objectValue = Utility.readObjectAndNarrow(orbStream, type);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1917
                    else
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1918
                        objectValue = orbStream.read_Object();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1919
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1920
                case ValueHandlerImpl.kAbstractType:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1921
                    if (type != null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1922
                        objectValue = Utility.readAbstractAndNarrow(orbStream, type);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1923
                    else
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1924
                        objectValue = orbStream.read_abstract_interface();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1925
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1926
                case ValueHandlerImpl.kValueType:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1927
                    if (type != null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1928
                        objectValue = orbStream.read_value(type);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1929
                    else
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1930
                                            objectValue = orbStream.read_value();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1931
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1932
                default:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1933
                    // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1934
                    throw new StreamCorruptedException("Unknown callType: " + callType);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1935
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1936
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1937
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1938
        return objectValue;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1939
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1940
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1941
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1942
     * Factored out of inputClassFields and reused in
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1943
     * inputCurrentClassFieldsForReadFields.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1944
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1945
     * Reads the field (which of an Object type as opposed to a primitive)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1946
     * described by ObjectStreamField field and returns it.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1947
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1948
    private Object inputObjectField(ObjectStreamField field)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1949
        throws InvalidClassException, StreamCorruptedException,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1950
               ClassNotFoundException, IndirectionException, IOException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1951
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1952
        if (ObjectStreamClassCorbaExt.isAny(field.getTypeString())) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1953
            return javax.rmi.CORBA.Util.readAny(orbStream);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1954
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1955
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1956
        Object objectValue = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1957
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1958
        // fields have an API to provide the actual class
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1959
        // corresponding to the data type
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1960
        // Class type = osc.forClass();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1961
        Class fieldType = field.getType();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1962
        Class actualType = fieldType; // This may change if stub loaded.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1963
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1964
        // Decide what method call to make based on the fieldType. If
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1965
        // it is a type for which we need to load a stub, convert
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1966
        // the type to the correct stub type.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1967
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1968
        int callType = ValueHandlerImpl.kValueType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1969
        boolean narrow = false;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1970
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1971
        if (fieldType.isInterface()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1972
            boolean loadStubClass = false;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1973
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1974
            if (java.rmi.Remote.class.isAssignableFrom(fieldType)) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1975
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1976
                // RMI Object reference...
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1977
                callType = ValueHandlerImpl.kRemoteType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1978
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1979
            } else if (org.omg.CORBA.Object.class.isAssignableFrom(fieldType)){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1980
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1981
                // IDL Object reference...
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1982
                callType = ValueHandlerImpl.kRemoteType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1983
                loadStubClass = true;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1984
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1985
            } else if (vhandler.isAbstractBase(fieldType)) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1986
                // IDL Abstract Object reference...
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1987
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1988
                callType = ValueHandlerImpl.kAbstractType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1989
                loadStubClass = true;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1990
            } else if (ObjectStreamClassCorbaExt.isAbstractInterface(fieldType)) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1991
                // RMI Abstract Object reference...
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1992
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1993
                callType = ValueHandlerImpl.kAbstractType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1994
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1995
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1996
            if (loadStubClass) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1997
                try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1998
                    String codebase = Util.getCodebase(fieldType);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  1999
                    String repID = vhandler.createForAnyType(fieldType);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2000
                    Class stubType =
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2001
                        Utility.loadStubClass(repID, codebase, fieldType);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2002
                    actualType = stubType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2003
                } catch (ClassNotFoundException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2004
                    narrow = true;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2005
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2006
            } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2007
                narrow = true;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2008
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2009
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2010
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2011
        switch (callType) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2012
            case ValueHandlerImpl.kRemoteType:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2013
                if (!narrow)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2014
                    objectValue = (Object)orbStream.read_Object(actualType);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2015
                else
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2016
                    objectValue = Utility.readObjectAndNarrow(orbStream, actualType);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2017
                break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2018
            case ValueHandlerImpl.kAbstractType:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2019
                if (!narrow)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2020
                    objectValue = (Object)orbStream.read_abstract_interface(actualType);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2021
                else
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2022
                    objectValue = Utility.readAbstractAndNarrow(orbStream, actualType);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2023
                break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2024
            case ValueHandlerImpl.kValueType:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2025
                objectValue = (Object)orbStream.read_value(actualType);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2026
                break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2027
            default:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2028
                // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2029
                throw new StreamCorruptedException("Unknown callType: " + callType);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2030
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2031
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2032
        return objectValue;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2033
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2034
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2035
    private final boolean mustUseRemoteValueMembers() {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2036
        return defaultReadObjectFVDMembers != null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2037
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2038
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2039
    void readFields(java.util.Map fieldToValueMap)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2040
        throws InvalidClassException, StreamCorruptedException,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2041
               ClassNotFoundException, IOException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2042
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2043
        if (mustUseRemoteValueMembers()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2044
            inputRemoteMembersForReadFields(fieldToValueMap);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2045
        } else
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2046
            inputCurrentClassFieldsForReadFields(fieldToValueMap);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2047
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2048
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2049
    private final void inputRemoteMembersForReadFields(java.util.Map fieldToValueMap)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2050
        throws InvalidClassException, StreamCorruptedException,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2051
               ClassNotFoundException, IOException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2052
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2053
        // Must have this local variable since defaultReadObjectFVDMembers
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2054
        // may get mangled by recursion.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2055
        ValueMember fields[] = defaultReadObjectFVDMembers;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2056
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2057
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2058
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2059
            for (int i = 0; i < fields.length; i++) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2060
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2061
                switch (fields[i].type.kind().value()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2063
                case TCKind._tk_octet:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2064
                    byte byteValue = orbStream.read_octet();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2065
                    fieldToValueMap.put(fields[i].name, new Byte(byteValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2066
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2067
                case TCKind._tk_boolean:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2068
                    boolean booleanValue = orbStream.read_boolean();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2069
                    fieldToValueMap.put(fields[i].name, new Boolean(booleanValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2070
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2071
                case TCKind._tk_char:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2072
                    // Backwards compatibility.  Older Sun ORBs sent
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2073
                    // _tk_char even though they read and wrote wchars
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2074
                    // correctly.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2075
                    //
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2076
                    // Fall through to the _tk_wchar case.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2077
                case TCKind._tk_wchar:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2078
                    char charValue = orbStream.read_wchar();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2079
                    fieldToValueMap.put(fields[i].name, new Character(charValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2080
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2081
                case TCKind._tk_short:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2082
                    short shortValue = orbStream.read_short();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2083
                    fieldToValueMap.put(fields[i].name, new Short(shortValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2084
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2085
                case TCKind._tk_long:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2086
                    int intValue = orbStream.read_long();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2087
                    fieldToValueMap.put(fields[i].name, new Integer(intValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2088
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2089
                case TCKind._tk_longlong:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2090
                    long longValue = orbStream.read_longlong();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2091
                    fieldToValueMap.put(fields[i].name, new Long(longValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2092
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2093
                case TCKind._tk_float:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2094
                    float floatValue = orbStream.read_float();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2095
                    fieldToValueMap.put(fields[i].name, new Float(floatValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2096
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2097
                case TCKind._tk_double:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2098
                    double doubleValue = orbStream.read_double();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2099
                    fieldToValueMap.put(fields[i].name, new Double(doubleValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2100
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2101
                case TCKind._tk_value:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2102
                case TCKind._tk_objref:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2103
                case TCKind._tk_value_box:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2104
                    Object objectValue = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2105
                    try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2106
                        objectValue = inputObjectField(fields[i],
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2107
                                                       cbSender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2108
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2109
                    } catch (IndirectionException cdrie) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2110
                        // The CDR stream had never seen the given offset before,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2111
                        // so check the recursion manager (it will throw an
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2112
                        // IOException if it doesn't have a reference, either).
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2113
                        objectValue = activeRecursionMgr.getObject(cdrie.offset);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2114
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2115
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2116
                    fieldToValueMap.put(fields[i].name, objectValue);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2117
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2118
                default:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2119
                    // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2120
                    throw new StreamCorruptedException("Unknown kind: "
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2121
                                                       + fields[i].type.kind().value());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2122
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2123
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2124
        } catch (Throwable t) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2125
            StreamCorruptedException result = new StreamCorruptedException(t.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2126
            result.initCause(t);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2127
            throw result;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2128
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2129
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2130
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2131
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2132
     * Called from InputStreamHook.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2133
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2134
     * Reads the fields of the current class (could be the ones
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2135
     * queried from the remote FVD) and puts them in
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2136
     * the given Map, name to value.  Wraps primitives in the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2137
     * corresponding java.lang Objects.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2138
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2139
    private final void inputCurrentClassFieldsForReadFields(java.util.Map fieldToValueMap)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2140
        throws InvalidClassException, StreamCorruptedException,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2141
               ClassNotFoundException, IOException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2142
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2143
        ObjectStreamField[] fields = currentClassDesc.getFieldsNoCopy();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2144
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2145
        int primFields = fields.length - currentClassDesc.objFields;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2146
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2147
        // Handle the primitives first
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2148
        for (int i = 0; i < primFields; ++i) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2149
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2150
            switch (fields[i].getTypeCode()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2151
                case 'B':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2152
                    byte byteValue = orbStream.read_octet();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2153
                    fieldToValueMap.put(fields[i].getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2154
                                        new Byte(byteValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2155
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2156
                case 'Z':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2157
                   boolean booleanValue = orbStream.read_boolean();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2158
                   fieldToValueMap.put(fields[i].getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2159
                                       new Boolean(booleanValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2160
                   break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2161
                case 'C':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2162
                    char charValue = orbStream.read_wchar();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2163
                    fieldToValueMap.put(fields[i].getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2164
                                        new Character(charValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2165
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2166
                case 'S':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2167
                    short shortValue = orbStream.read_short();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2168
                    fieldToValueMap.put(fields[i].getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2169
                                        new Short(shortValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2170
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2171
                case 'I':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2172
                    int intValue = orbStream.read_long();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2173
                    fieldToValueMap.put(fields[i].getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2174
                                        new Integer(intValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2175
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2176
                case 'J':
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2177
                    long longValue = orbStream.read_longlong();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2178
                    fieldToValueMap.put(fields[i].getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2179
                                        new Long(longValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2180
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2181
                case 'F' :
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2182
                    float floatValue = orbStream.read_float();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2183
                    fieldToValueMap.put(fields[i].getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2184
                                        new Float(floatValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2185
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2186
                case 'D' :
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2187
                    double doubleValue = orbStream.read_double();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2188
                    fieldToValueMap.put(fields[i].getName(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2189
                                        new Double(doubleValue));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2190
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2191
                default:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2192
                    // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2193
                    throw new InvalidClassException(currentClassDesc.getName());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2194
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2195
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2196
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2197
        /* Read and set object fields from the input stream. */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2198
        if (currentClassDesc.objFields > 0) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2199
            for (int i = primFields; i < fields.length; i++) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2200
                Object objectValue = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2201
                try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2202
                    objectValue = inputObjectField(fields[i]);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2203
                } catch(IndirectionException cdrie) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2204
                    // The CDR stream had never seen the given offset before,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2205
                    // so check the recursion manager (it will throw an
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2206
                    // IOException if it doesn't have a reference, either).
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2207
                    objectValue = activeRecursionMgr.getObject(cdrie.offset);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2208
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2209
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2210
                fieldToValueMap.put(fields[i].getName(), objectValue);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2211
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2212
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2213
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2214
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2215
    /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2216
     * Read the fields of the specified class from the input stream and set
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2217
     * the values of the fields in the specified object. If the specified
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2218
     * object is null, just consume the fields without setting any values. If
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2219
     * any ObjectStreamField does not have a reflected Field, don't try to set
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2220
     * that field in the object.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2221
     *
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2222
     * REVISIT -- This code doesn't do what the comment says to when
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2223
     * getField() is null!
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2224
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2225
    private void inputClassFields(Object o, Class cl,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2226
                                  ObjectStreamField[] fields,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2227
                                  com.sun.org.omg.SendingContext.CodeBase sender)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2228
        throws InvalidClassException, StreamCorruptedException,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2229
               ClassNotFoundException, IOException
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2230
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2231
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2232
        int primFields = fields.length - currentClassDesc.objFields;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2233
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2234
        if (o != null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2235
            for (int i = 0; i < primFields; ++i) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2236
                inputPrimitiveField(o, cl, fields[i]);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2237
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2238
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2239
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2240
        /* Read and set object fields from the input stream. */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2241
        if (currentClassDesc.objFields > 0) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2242
            for (int i = primFields; i < fields.length; i++) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2243
                Object objectValue = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2244
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2245
                try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2246
                    objectValue = inputObjectField(fields[i]);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2247
                } catch(IndirectionException cdrie) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2248
                    // The CDR stream had never seen the given offset before,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2249
                    // so check the recursion manager (it will throw an
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2250
                    // IOException if it doesn't have a reference, either).
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2251
                    objectValue = activeRecursionMgr.getObject(cdrie.offset);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2252
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2253
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2254
                if ((o == null) || (fields[i].getField() == null)) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2255
                    continue;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2256
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2257
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2258
                try {
10924
d64965d212fc 7055902: Oracle Java IIOP Deserialization Type Confusion Remote Code Execution Vulnerability
mbankal
parents: 7672
diff changeset
  2259
                    Class fieldCl = fields[i].getClazz();
d64965d212fc 7055902: Oracle Java IIOP Deserialization Type Confusion Remote Code Execution Vulnerability
mbankal
parents: 7672
diff changeset
  2260
                    if (objectValue != null && !fieldCl.isInstance(objectValue)) {
d64965d212fc 7055902: Oracle Java IIOP Deserialization Type Confusion Remote Code Execution Vulnerability
mbankal
parents: 7672
diff changeset
  2261
                        throw new IllegalArgumentException();
d64965d212fc 7055902: Oracle Java IIOP Deserialization Type Confusion Remote Code Execution Vulnerability
mbankal
parents: 7672
diff changeset
  2262
                    }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2263
                    bridge.putObject( o, fields[i].getFieldID(), objectValue ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2264
                    // reflective code: fields[i].getField().set( o, objectValue ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2265
                } catch (IllegalArgumentException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2266
                    ClassCastException exc = new ClassCastException("Assigning instance of class " +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2267
                                                 objectValue.getClass().getName() +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2268
                                                 " to field " +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2269
                                                 currentClassDesc.getName() +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2270
                                                 '#' +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2271
                                                 fields[i].getField().getName());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2272
                    exc.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2273
                    throw exc ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2274
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2275
            } // end : for loop
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2276
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2277
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2278
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2279
    /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2280
     * Read the fields of the specified class from the input stream and set
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2281
     * the values of the fields in the specified object. If the specified
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2282
     * object is null, just consume the fields without setting any values. If
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2283
     * any ObjectStreamField does not have a reflected Field, don't try to set
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2284
     * that field in the object.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2285
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2286
    private void inputClassFields(Object o, Class cl,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2287
                                  ObjectStreamClass osc,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2288
                                  ValueMember[] fields,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2289
                                  com.sun.org.omg.SendingContext.CodeBase sender)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2290
        throws InvalidClassException, StreamCorruptedException,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2291
               ClassNotFoundException, IOException
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2292
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2293
        try{
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2294
            for (int i = 0; i < fields.length; ++i) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2295
                try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2296
                    switch (fields[i].type.kind().value()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2297
                    case TCKind._tk_octet:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2298
                        byte byteValue = orbStream.read_octet();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2299
                        if ((o != null) && osc.hasField(fields[i]))
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2300
                        setByteField(o, cl, fields[i].name, byteValue);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2301
                        break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2302
                    case TCKind._tk_boolean:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2303
                        boolean booleanValue = orbStream.read_boolean();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2304
                        if ((o != null) && osc.hasField(fields[i]))
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2305
                        setBooleanField(o, cl, fields[i].name, booleanValue);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2306
                        break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2307
                    case TCKind._tk_char:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2308
                        // Backwards compatibility.  Older Sun ORBs sent
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2309
                        // _tk_char even though they read and wrote wchars
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2310
                        // correctly.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2311
                        //
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2312
                        // Fall through to the _tk_wchar case.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2313
                    case TCKind._tk_wchar:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2314
                        char charValue = orbStream.read_wchar();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2315
                        if ((o != null) && osc.hasField(fields[i]))
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2316
                        setCharField(o, cl, fields[i].name, charValue);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2317
                        break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2318
                    case TCKind._tk_short:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2319
                        short shortValue = orbStream.read_short();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2320
                        if ((o != null) && osc.hasField(fields[i]))
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2321
                        setShortField(o, cl, fields[i].name, shortValue);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2322
                        break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2323
                    case TCKind._tk_long:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2324
                        int intValue = orbStream.read_long();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2325
                        if ((o != null) && osc.hasField(fields[i]))
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2326
                        setIntField(o, cl, fields[i].name, intValue);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2327
                        break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2328
                    case TCKind._tk_longlong:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2329
                        long longValue = orbStream.read_longlong();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2330
                        if ((o != null) && osc.hasField(fields[i]))
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2331
                        setLongField(o, cl, fields[i].name, longValue);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2332
                        break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2333
                    case TCKind._tk_float:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2334
                        float floatValue = orbStream.read_float();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2335
                        if ((o != null) && osc.hasField(fields[i]))
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2336
                        setFloatField(o, cl, fields[i].name, floatValue);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2337
                        break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2338
                    case TCKind._tk_double:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2339
                        double doubleValue = orbStream.read_double();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2340
                        if ((o != null) && osc.hasField(fields[i]))
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2341
                        setDoubleField(o, cl, fields[i].name, doubleValue);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2342
                        break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2343
                    case TCKind._tk_value:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2344
                    case TCKind._tk_objref:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2345
                    case TCKind._tk_value_box:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2346
                        Object objectValue = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2347
                        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2348
                            objectValue = inputObjectField(fields[i], sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2349
                        } catch (IndirectionException cdrie) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2350
                            // The CDR stream had never seen the given offset before,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2351
                            // so check the recursion manager (it will throw an
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2352
                            // IOException if it doesn't have a reference, either).
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2353
                            objectValue = activeRecursionMgr.getObject(cdrie.offset);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2354
                        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2355
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2356
                        if (o == null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2357
                            continue;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2358
                        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2359
                            if (osc.hasField(fields[i])){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2360
                                setObjectField(o,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2361
                                               cl,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2362
                                               fields[i].name,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2363
                                               objectValue);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2364
                            } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2365
                                // REVISIT.  Convert to a log message.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2366
                                // This is a normal case when fields have
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2367
                                // been added as part of evolution, but
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2368
                                // silently skipping can make it hard to
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2369
                                // debug if there's an error
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2370
//                                 System.out.println("**** warning, not setting field: "
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2371
//                                                    + fields[i].name
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2372
//                                                    + " since not on class "
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2373
//                                                    + osc.getName());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2374
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2375
                            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2376
                        } catch (IllegalArgumentException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2377
                            // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2378
                            ClassCastException cce = new ClassCastException("Assigning instance of class " +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2379
                                objectValue.getClass().getName() + " to field " + fields[i].name);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2380
                            cce.initCause(e) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2381
                            throw cce ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2382
                        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2383
                        break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2384
                    default:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2385
                        // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2386
                        throw new StreamCorruptedException("Unknown kind: "
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2387
                                                           + fields[i].type.kind().value());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2388
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2389
                } catch (IllegalArgumentException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2390
                    /* This case should never happen. If the field types
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2391
                       are not the same, InvalidClassException is raised when
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2392
                       matching the local class to the serialized ObjectStreamClass. */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2393
                    // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2394
                    ClassCastException cce = new ClassCastException("Assigning instance of class " + fields[i].id +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2395
                        " to field " + currentClassDesc.getName() + '#' + fields[i].name);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2396
                    cce.initCause( e ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2397
                    throw cce ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2398
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2399
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2400
        } catch(Throwable t){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2401
            // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2402
            StreamCorruptedException sce = new StreamCorruptedException(t.getMessage());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2403
            sce.initCause(t) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2404
            throw sce ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2405
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2406
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2407
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2408
    private void skipCustomUsingFVD(ValueMember[] fields,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2409
                                    com.sun.org.omg.SendingContext.CodeBase sender)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2410
                                    throws InvalidClassException, StreamCorruptedException,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2411
                                           ClassNotFoundException, IOException
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2412
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2413
        readFormatVersion();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2414
        boolean calledDefaultWriteObject = readBoolean();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2415
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2416
        if (calledDefaultWriteObject)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2417
            throwAwayData(fields, sender);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2418
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2419
        if (getStreamFormatVersion() == 2) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2420
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2421
            ((ValueInputStream)getOrbStream()).start_value();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2422
            ((ValueInputStream)getOrbStream()).end_value();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2423
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2424
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2425
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2426
    /*
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2427
     * Read the fields of the specified class from the input stream throw data away.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2428
     * This must handle same switch logic as above.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2429
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2430
    private void throwAwayData(ValueMember[] fields,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2431
                               com.sun.org.omg.SendingContext.CodeBase sender)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2432
        throws InvalidClassException, StreamCorruptedException,
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2433
               ClassNotFoundException, IOException {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2434
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2435
        for (int i = 0; i < fields.length; ++i) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2436
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2437
            try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2438
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2439
                switch (fields[i].type.kind().value()) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2440
                case TCKind._tk_octet:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2441
                    orbStream.read_octet();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2442
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2443
                case TCKind._tk_boolean:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2444
                    orbStream.read_boolean();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2445
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2446
                case TCKind._tk_char:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2447
                    // Backwards compatibility.  Older Sun ORBs sent
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2448
                    // _tk_char even though they read and wrote wchars
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2449
                    // correctly.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2450
                    //
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2451
                    // Fall through to the _tk_wchar case.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2452
                case TCKind._tk_wchar:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2453
                    orbStream.read_wchar();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2454
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2455
                case TCKind._tk_short:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2456
                    orbStream.read_short();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2457
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2458
                case TCKind._tk_long:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2459
                    orbStream.read_long();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2460
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2461
                case TCKind._tk_longlong:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2462
                    orbStream.read_longlong();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2463
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2464
                case TCKind._tk_float:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2465
                    orbStream.read_float();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2466
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2467
                case TCKind._tk_double:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2468
                    orbStream.read_double();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2469
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2470
                case TCKind._tk_value:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2471
                case TCKind._tk_objref:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2472
                case TCKind._tk_value_box:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2473
                    Class type = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2474
                    String id = fields[i].id;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2475
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2476
                    try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2477
                        type = vhandler.getClassFromType(id);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2478
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2479
                    catch(ClassNotFoundException cnfe){
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2480
                        // Make sure type = null
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2481
                        type = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2482
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2483
                    String signature = null;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2484
                    if (type != null)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2485
                        signature = ValueUtility.getSignature(fields[i]);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2486
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2487
                    // Read value
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2488
                    try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2489
                        if ((signature != null) && ( signature.equals("Ljava/lang/Object;") ||
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2490
                                                     signature.equals("Ljava/io/Serializable;") ||
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2491
                                                     signature.equals("Ljava/io/Externalizable;")) ) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2492
                            javax.rmi.CORBA.Util.readAny(orbStream);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2493
                        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2494
                        else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2495
                            // Decide what method call to make based on the type.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2496
                            //
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2497
                            // NOTE : Since FullValueDescription does not allow us
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2498
                            // to ask whether something is an interface we do not
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2499
                            // have the ability to optimize this check.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2500
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2501
                            int callType = ValueHandlerImpl.kValueType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2502
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2503
                            if (!vhandler.isSequence(id)) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2504
                                FullValueDescription fieldFVD = sender.meta(fields[i].id);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2505
                                if (kRemoteTypeCode == fields[i].type) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2506
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2507
                                    // RMI Object reference...
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2508
                                    callType = ValueHandlerImpl.kRemoteType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2509
                                } else if (fieldFVD.is_abstract) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2510
                                    // RMI Abstract Object reference...
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2511
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2512
                                    callType = ValueHandlerImpl.kAbstractType;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2513
                                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2514
                            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2515
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2516
                            // Now that we have used the FVD of the field to determine the proper course
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2517
                            // of action, it is ok to use the type (Class) from this point forward since
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2518
                            // the rep. id for this read will also follow on the wire.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2519
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2520
                            switch (callType) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2521
                            case ValueHandlerImpl.kRemoteType:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2522
                                orbStream.read_Object();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2523
                                break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2524
                            case ValueHandlerImpl.kAbstractType:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2525
                                orbStream.read_abstract_interface();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2526
                                break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2527
                            case ValueHandlerImpl.kValueType:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2528
                                if (type != null) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2529
                                    orbStream.read_value(type);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2530
                                } else {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2531
                                    orbStream.read_value();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2532
                                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2533
                                break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2534
                            default:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2535
                                // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2536
                                throw new StreamCorruptedException("Unknown callType: "
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2537
                                                                   + callType);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2538
                            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2539
                        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2540
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2541
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2542
                    catch(IndirectionException cdrie) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2543
                        // Since we are throwing this away, don't bother handling recursion.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2544
                        continue;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2545
                    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2546
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2547
                    break;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2548
                default:
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2549
                    // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2550
                    throw new StreamCorruptedException("Unknown kind: "
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2551
                                                       + fields[i].type.kind().value());
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2552
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2553
                }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2554
            } catch (IllegalArgumentException e) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2555
                /* This case should never happen. If the field types
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2556
                   are not the same, InvalidClassException is raised when
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2557
                   matching the local class to the serialized ObjectStreamClass. */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2558
                // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2559
                ClassCastException cce = new ClassCastException("Assigning instance of class " +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2560
                    fields[i].id + " to field " + currentClassDesc.getName() +
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2561
                    '#' + fields[i].name);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2562
                cce.initCause(e) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2563
                throw cce ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2564
            }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2565
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2566
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2567
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2568
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2569
    private static void setObjectField(Object o, Class c, String fieldName, Object v) {
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2570
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2571
            Field fld = c.getDeclaredField( fieldName ) ;
10924
d64965d212fc 7055902: Oracle Java IIOP Deserialization Type Confusion Remote Code Execution Vulnerability
mbankal
parents: 7672
diff changeset
  2572
            Class fieldCl = fld.getType();
d64965d212fc 7055902: Oracle Java IIOP Deserialization Type Confusion Remote Code Execution Vulnerability
mbankal
parents: 7672
diff changeset
  2573
            if(v != null && !fieldCl.isInstance(v)) {
d64965d212fc 7055902: Oracle Java IIOP Deserialization Type Confusion Remote Code Execution Vulnerability
mbankal
parents: 7672
diff changeset
  2574
                throw new Exception();
d64965d212fc 7055902: Oracle Java IIOP Deserialization Type Confusion Remote Code Execution Vulnerability
mbankal
parents: 7672
diff changeset
  2575
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2576
            long key = bridge.objectFieldOffset( fld ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2577
            bridge.putObject( o, key, v ) ;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2578
        } catch (Exception e) {
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2579
            if (o != null) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2580
                throw utilWrapper.errorSetObjectField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2581
                    o.toString(),
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2582
                    v.toString() ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2583
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2584
                throw utilWrapper.errorSetObjectField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2585
                    "null " + c.getName() + " object",
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2586
                    v.toString() ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2587
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2588
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2589
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2590
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2591
    private static void setBooleanField(Object o, Class c, String fieldName, boolean v)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2592
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2593
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2594
            Field fld = c.getDeclaredField( fieldName ) ;
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2595
            if ((fld != null) && (fld.getType() == Boolean.TYPE)) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2596
                long key = bridge.objectFieldOffset( fld ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2597
                bridge.putBoolean( o, key, v ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2598
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2599
                throw new InvalidObjectException("Field Type mismatch");
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2600
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2601
        } catch (Exception e) {
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2602
            if (o != null) {
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2603
            throw utilWrapper.errorSetBooleanField( e, fieldName,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2604
                o.toString(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2605
                new Boolean(v) ) ;
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2606
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2607
                throw utilWrapper.errorSetBooleanField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2608
                    "null " + c.getName() + " object",
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2609
                    new Boolean(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2610
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2611
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2612
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2613
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2614
    private static void setByteField(Object o, Class c, String fieldName, byte v)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2615
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2616
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2617
            Field fld = c.getDeclaredField( fieldName ) ;
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2618
            if ((fld != null) && (fld.getType() == Byte.TYPE)) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2619
                long key = bridge.objectFieldOffset( fld ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2620
                bridge.putByte( o, key, v ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2621
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2622
                throw new InvalidObjectException("Field Type mismatch");
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2623
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2624
        } catch (Exception e) {
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2625
            if (o != null) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2626
                throw utilWrapper.errorSetByteField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2627
                    o.toString(),
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2628
                    new Byte(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2629
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2630
                throw utilWrapper.errorSetByteField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2631
                    "null " + c.getName() + " object",
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2632
                    new Byte(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2633
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2634
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2635
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2636
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2637
    private static void setCharField(Object o, Class c, String fieldName, char v)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2638
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2639
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2640
            Field fld = c.getDeclaredField( fieldName ) ;
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2641
            if ((fld != null) && (fld.getType() == Character.TYPE)) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2642
                long key = bridge.objectFieldOffset( fld ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2643
                bridge.putChar( o, key, v ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2644
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2645
                throw new InvalidObjectException("Field Type mismatch");
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2646
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2647
        } catch (Exception e) {
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2648
            if (o != null) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2649
                throw utilWrapper.errorSetCharField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2650
                    o.toString(),
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2651
                    new Character(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2652
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2653
                throw utilWrapper.errorSetCharField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2654
                    "null " + c.getName() + " object",
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2655
                    new Character(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2656
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2657
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2658
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2659
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2660
    private static void setShortField(Object o, Class c, String fieldName, short v)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2661
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2662
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2663
            Field fld = c.getDeclaredField( fieldName ) ;
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2664
            if ((fld != null) && (fld.getType() == Short.TYPE)) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2665
                long key = bridge.objectFieldOffset( fld ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2666
                bridge.putShort( o, key, v ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2667
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2668
                throw new InvalidObjectException("Field Type mismatch");
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2669
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2670
        } catch (Exception e) {
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2671
            if (o != null) {
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2672
            throw utilWrapper.errorSetShortField( e, fieldName,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2673
                o.toString(),
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2674
                new Short(v) ) ;
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2675
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2676
                throw utilWrapper.errorSetShortField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2677
                    "null " + c.getName() + " object",
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2678
                    new Short(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2679
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2680
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2681
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2682
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2683
    private static void setIntField(Object o, Class c, String fieldName, int v)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2684
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2685
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2686
            Field fld = c.getDeclaredField( fieldName ) ;
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2687
            if ((fld != null) && (fld.getType() == Integer.TYPE)) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2688
                long key = bridge.objectFieldOffset( fld ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2689
                bridge.putInt( o, key, v ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2690
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2691
                throw new InvalidObjectException("Field Type mismatch");
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2692
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2693
        } catch (Exception e) {
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2694
            if (o != null) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2695
                throw utilWrapper.errorSetIntField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2696
                    o.toString(),
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2697
                    new Integer(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2698
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2699
                throw utilWrapper.errorSetIntField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2700
                    "null " + c.getName() + " object",
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2701
                    new Integer(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2702
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2703
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2704
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2705
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2706
    private static void setLongField(Object o, Class c, String fieldName, long v)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2707
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2708
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2709
            Field fld = c.getDeclaredField( fieldName ) ;
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2710
            if ((fld != null) && (fld.getType() == Long.TYPE)) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2711
                long key = bridge.objectFieldOffset( fld ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2712
                bridge.putLong( o, key, v ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2713
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2714
                throw new InvalidObjectException("Field Type mismatch");
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2715
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2716
        } catch (Exception e) {
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2717
            if (o != null) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2718
                throw utilWrapper.errorSetLongField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2719
                    o.toString(),
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2720
                    new Long(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2721
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2722
                throw utilWrapper.errorSetLongField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2723
                    "null " + c.getName() + " object",
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2724
                    new Long(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2725
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2726
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2727
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2728
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2729
    private static void setFloatField(Object o, Class c, String fieldName, float v)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2730
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2731
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2732
            Field fld = c.getDeclaredField( fieldName ) ;
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2733
            if ((fld != null) && (fld.getType() == Float.TYPE)) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2734
                long key = bridge.objectFieldOffset( fld ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2735
                bridge.putFloat( o, key, v ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2736
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2737
                throw new InvalidObjectException("Field Type mismatch");
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2738
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2739
        } catch (Exception e) {
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2740
            if (o != null) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2741
                throw utilWrapper.errorSetFloatField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2742
                    o.toString(),
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2743
                    new Float(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2744
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2745
                throw utilWrapper.errorSetFloatField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2746
                    "null " + c.getName() + " object",
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2747
                    new Float(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2748
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2749
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2750
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2751
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2752
    private static void setDoubleField(Object o, Class c, String fieldName, double v)
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2753
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2754
        try {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2755
            Field fld = c.getDeclaredField( fieldName ) ;
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2756
            if ((fld != null) && (fld.getType() == Double.TYPE)) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2757
                long key = bridge.objectFieldOffset( fld ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2758
                bridge.putDouble( o, key, v ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2759
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2760
                throw new InvalidObjectException("Field Type mismatch");
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2761
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2762
        } catch (Exception e) {
31733
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2763
            if (o != null) {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2764
                throw utilWrapper.errorSetDoubleField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2765
                    o.toString(),
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2766
                    new Double(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2767
            } else {
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2768
                throw utilWrapper.errorSetDoubleField( e, fieldName,
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2769
                    "null " + c.getName() + " object",
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2770
                    new Double(v) ) ;
0d786ab95c1c 8076376: Enhance IIOP operations
msheppar
parents: 29936
diff changeset
  2771
            }
7062
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2772
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2773
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2774
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2775
    /**
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2776
     * This class maintains a map of stream position to
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2777
     * an Object currently being deserialized.  It is used
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2778
     * to handle the cases where the are indirections to
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2779
     * an object on the recursion stack.  The CDR level
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2780
     * handles indirections to objects previously seen
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2781
     * (and completely deserialized) in the stream.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2782
     */
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2783
    static class ActiveRecursionManager
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2784
    {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2785
        private Map offsetToObjectMap;
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2786
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2787
        public ActiveRecursionManager() {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2788
            // A hash map is unsynchronized and allows
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2789
            // null values
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2790
            offsetToObjectMap = new HashMap();
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2791
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2792
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2793
        // Called right after allocating a new object.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2794
        // Offset is the starting position in the stream
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2795
        // of the object.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2796
        public void addObject(int offset, Object value) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2797
            offsetToObjectMap.put(new Integer(offset), value);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2798
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2799
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2800
        // If the given starting position doesn't refer
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2801
        // to the beginning of an object currently being
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2802
        // deserialized, this throws an IOException.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2803
        // Otherwise, it returns a reference to the
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2804
        // object.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2805
        public Object getObject(int offset) throws IOException {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2806
            Integer position = new Integer(offset);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2807
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2808
            if (!offsetToObjectMap.containsKey(position))
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2809
                // XXX I18N, logging needed.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2810
                throw new IOException("Invalid indirection to offset "
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2811
                                      + offset);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2812
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2813
            return offsetToObjectMap.get(position);
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2814
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2815
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2816
        // Called when an object has been completely
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2817
        // deserialized, so it should no longer be in
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2818
        // this mapping.  The CDR level can handle
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2819
        // further indirections.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2820
        public void removeObject(int offset) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2821
            offsetToObjectMap.remove(new Integer(offset));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2822
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2823
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2824
        // If the given offset doesn't map to an Object,
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2825
        // then it isn't an indirection to an object
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2826
        // currently being deserialized.
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2827
        public boolean containsObject(int offset) {
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2828
            return offsetToObjectMap.containsKey(new Integer(offset));
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2829
        }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2830
    }
ef0cbcadb1e1 6996740: Yet more breakage caused by 6891766
alanb
parents:
diff changeset
  2831
}