📄 repositoryid_1_3_1.java
字号:
/* * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. *//* * @(#)RepositoryId_1_3_1.java 1.3 03/01/23 */package com.sun.corba.se.internal.orbutil;import java.util.StringTokenizer;import java.util.Hashtable;import java.io.IOException;import java.lang.reflect.Method;import java.net.MalformedURLException;import org.omg.CORBA.portable.ValueBase;import org.omg.CORBA.portable.IDLEntity;//d11638 files in the same package, therefore remove their reference//import com.sun.corba.se.internal.util.JDKBridge;//import com.sun.corba.se.internal.util.IdentityHashtable;import com.sun.corba.se.internal.util.JDKBridge;import com.sun.corba.se.internal.util.Utility;import com.sun.corba.se.internal.util.PackagePrefixChecker;import com.sun.corba.se.internal.util.IdentityHashtable;import javax.rmi.CORBA.Util;/** * Because all methods in RepositoryId are static, we have * to duplicate all of this code, freezing it in its 1.3.1 * form for backwards compatibility. * * For security reasons, we can't expose enough of * io/ObjectStreamClass, so it has to be duplicated in * orbutil. */public class RepositoryId_1_3_1 { // Legal IDL Identifier characters (1 = legal). Note // that '.' (2E) is marked as legal even though it is // not legal in IDL. This allows us to treat a fully // qualified Java name with '.' package separators // uniformly, and is safe because that is the only // legal use of '.' in a Java name. public static final byte[] IDL_IDENTIFIER_CHARS = { // 0 1 2 3 4 5 6 7 8 9 a b c d e f 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 00-0f 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 10-1f 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0, // 20-2f 1,1,1,1, 1,1,1,1, 1,1,0,0, 0,0,0,0, // 30-3f 0,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // 40-4f 1,1,1,1, 1,1,1,1, 1,1,1,0, 0,0,0,1, // 50-5f 0,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // 60-6f 1,1,1,1, 1,1,1,1, 1,1,1,0, 0,0,0,0, // 70-7f 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 80-8f 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 90-9f 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // a0-af 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // b0-bf 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // c0-cf 0,1,1,1, 1,1,1,0, 1,1,1,1, 1,0,0,1, // d0-df 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, // e0-ef 0,1,1,1, 1,1,1,0, 1,1,1,1, 1,0,0,1, // f0-ff }; private static final long serialVersionUID = 123456789L; private static String defaultServerURL = null; private static boolean useCodebaseOnly = false; static { if (defaultServerURL == null) defaultServerURL = (String)JDKBridge.getLocalCodebase(); useCodebaseOnly = JDKBridge.useCodebaseOnly(); } private static IdentityHashtable classToRepStr = new IdentityHashtable(); private static IdentityHashtable classIDLToRepStr = new IdentityHashtable(); private static IdentityHashtable classSeqToRepStr = new IdentityHashtable(); private static IdentityHashtable repStrToByteArray = new IdentityHashtable(); private static Hashtable repStrToClass = new Hashtable(); private String repId = null; private boolean isSupportedFormat = true; private String typeString = null; private String versionString = null; private boolean isSequence = false; private boolean isRMIValueType = false; private boolean isIDLType = false; private String completeClassName = null; private String unqualifiedName = null; private String definedInId = null; private Class clazz = null; private String suid = null, actualSuid = null; private long suidLong = ObjectStreamClass_1_3_1.kDefaultUID, actualSuidLong = ObjectStreamClass_1_3_1.kDefaultUID; // Repository ID fragments private static final String kSequenceKeyword = "seq"; private static final String kValuePrefix = "RMI:"; private static final String kIDLPrefix = "IDL:"; private static final String kIDLNamePrefix = "omg.org/"; private static final String kIDLClassnamePrefix = "org.omg."; private static final String kSequencePrefix = "["; private static final String kCORBAPrefix = "CORBA/"; private static final String kArrayPrefix = kValuePrefix + kSequencePrefix + kCORBAPrefix; private static final int kValuePrefixLength = kValuePrefix.length(); private static final int kIDLPrefixLength = kIDLPrefix.length(); private static final int kSequencePrefixLength = kSequencePrefix.length(); private static final String kInterfaceHashCode = ":0000000000000000"; private static final String kInterfaceOnlyHashStr = "0000000000000000"; private static final String kExternalizableHashStr = "0000000000000001"; // Value tag utility methods and constants public static final int kInitialValueTag= 0x7fffff00; public static final int kNoTypeInfo = 0; public static final int kSingleRepTypeInfo = 0x02; public static final int kPartialListTypeInfo = 0x06; public static final int kChunkedMask = 0x08; public static final int kPreComputed_StandardRMIUnchunked = RepositoryId_1_3_1.computeValueTag(false, RepositoryId_1_3_1.kSingleRepTypeInfo, false); public static final int kPreComputed_CodeBaseRMIUnchunked = RepositoryId_1_3_1.computeValueTag(true, RepositoryId_1_3_1.kSingleRepTypeInfo, false); public static final int kPreComputed_StandardRMIChunked = RepositoryId_1_3_1.computeValueTag(false, RepositoryId_1_3_1.kSingleRepTypeInfo, true); public static final int kPreComputed_CodeBaseRMIChunked = RepositoryId_1_3_1.computeValueTag(true, RepositoryId_1_3_1.kSingleRepTypeInfo, true); public static final int kPreComputed_StandardRMIUnchunked_NoRep = RepositoryId_1_3_1.computeValueTag(false, RepositoryId_1_3_1.kNoTypeInfo, false); public static final int kPreComputed_CodeBaseRMIUnchunked_NoRep = RepositoryId_1_3_1.computeValueTag(true, RepositoryId_1_3_1.kNoTypeInfo, false); public static final int kPreComputed_StandardRMIChunked_NoRep = RepositoryId_1_3_1.computeValueTag(false, RepositoryId_1_3_1.kNoTypeInfo, true); public static final int kPreComputed_CodeBaseRMIChunked_NoRep = RepositoryId_1_3_1.computeValueTag(true, RepositoryId_1_3_1.kNoTypeInfo, true); // Public, well known repository IDs // _REVISIT_ : A table structure with a good search routine for all of this // would be more efficient and easier to maintain... // String public static final String kWStringValueVersion = "1.0"; public static final String kWStringValueHash = ":"+kWStringValueVersion; public static final String kWStringStubValue = "WStringValue"; public static final String kWStringTypeStr = "omg.org/CORBA/"+kWStringStubValue; public static final String kWStringValueRepID = kIDLPrefix + kWStringTypeStr + kWStringValueHash; // Any public static final String kAnyRepID = kIDLPrefix + "omg.org/CORBA/Any"; // Class // Anita4: convert to uppercase public static final String kClassDescValueHash = ":" + Long.toHexString( ObjectStreamClass_1_3_1.getActualSerialVersionUID(javax.rmi.CORBA.ClassDesc.class)).toUpperCase() + ":" + Long.toHexString( ObjectStreamClass_1_3_1.getSerialVersionUID(javax.rmi.CORBA.ClassDesc.class)).toUpperCase(); public static final String kClassDescStubValue = "ClassDesc"; public static final String kClassDescTypeStr = "javax.rmi.CORBA."+kClassDescStubValue; public static final String kClassDescValueRepID = kValuePrefix + kClassDescTypeStr + kClassDescValueHash; // Object public static final String kObjectValueHash = ":1.0"; public static final String kObjectStubValue = "Object"; // Sequence public static final String kSequenceValueHash = ":1.0"; public static final String kPrimitiveSequenceValueHash = ":0000000000000000"; // Serializable public static final String kSerializableValueHash = ":1.0"; public static final String kSerializableStubValue = "Serializable"; // Externalizable public static final String kExternalizableValueHash = ":1.0"; public static final String kExternalizableStubValue = "Externalizable"; // Remote (The empty string is used for java.rmi.Remote) public static final String kRemoteValueHash = ""; public static final String kRemoteStubValue = ""; public static final String kRemoteTypeStr = ""; public static final String kRemoteValueRepID = ""; public static final Hashtable kSpecialArrayTypeStrings = new Hashtable(); static { kSpecialArrayTypeStrings.put("CORBA.WStringValue", new StringBuffer(java.lang.String.class.getName())); kSpecialArrayTypeStrings.put("javax.rmi.CORBA.ClassDesc", new StringBuffer(java.lang.Class.class.getName())); kSpecialArrayTypeStrings.put("CORBA.Object", new StringBuffer(java.rmi.Remote.class.getName())); } public static final Hashtable kSpecialCasesRepIDs = new Hashtable(); static { kSpecialCasesRepIDs.put(java.lang.String.class, kWStringValueRepID); kSpecialCasesRepIDs.put(java.lang.Class.class, kClassDescValueRepID); kSpecialCasesRepIDs.put(java.rmi.Remote.class, kRemoteValueRepID); } public static final Hashtable kSpecialCasesStubValues = new Hashtable(); static { kSpecialCasesStubValues.put(java.lang.String.class, kWStringStubValue); kSpecialCasesStubValues.put(java.lang.Class.class, kClassDescStubValue); kSpecialCasesStubValues.put(java.lang.Object.class, kObjectStubValue); kSpecialCasesStubValues.put(java.io.Serializable.class, kSerializableStubValue); kSpecialCasesStubValues.put(java.io.Externalizable.class, kExternalizableStubValue); kSpecialCasesStubValues.put(java.rmi.Remote.class, kRemoteStubValue); } public static final Hashtable kSpecialCasesVersions = new Hashtable(); static { kSpecialCasesVersions.put(java.lang.String.class, kWStringValueHash); kSpecialCasesVersions.put(java.lang.Class.class, kClassDescValueHash); kSpecialCasesVersions.put(java.lang.Object.class, kObjectValueHash); kSpecialCasesVersions.put(java.io.Serializable.class, kSerializableValueHash); kSpecialCasesVersions.put(java.io.Externalizable.class, kExternalizableValueHash); kSpecialCasesVersions.put(java.rmi.Remote.class, kRemoteValueHash); } public static final Hashtable kSpecialCasesClasses = new Hashtable(); static { kSpecialCasesClasses.put(kWStringTypeStr, java.lang.String.class); kSpecialCasesClasses.put(kClassDescTypeStr, java.lang.Class.class); kSpecialCasesClasses.put(kRemoteTypeStr, java.rmi.Remote.class); kSpecialCasesClasses.put("org.omg.CORBA.WStringValue", java.lang.String.class); kSpecialCasesClasses.put("javax.rmi.CORBA.ClassDesc", java.lang.Class.class); //kSpecialCasesClasses.put(kRemoteTypeStr, java.rmi.Remote.class); } public static final Hashtable kSpecialCasesArrayPrefix = new Hashtable(); static { kSpecialCasesArrayPrefix.put(java.lang.String.class, kValuePrefix + kSequencePrefix + kCORBAPrefix); kSpecialCasesArrayPrefix.put(java.lang.Class.class, kValuePrefix + kSequencePrefix + "javax/rmi/CORBA/"); kSpecialCasesArrayPrefix.put(java.lang.Object.class, kValuePrefix + kSequencePrefix + "java/lang/"); kSpecialCasesArrayPrefix.put(java.io.Serializable.class, kValuePrefix + kSequencePrefix + "java/io/"); kSpecialCasesArrayPrefix.put(java.io.Externalizable.class, kValuePrefix + kSequencePrefix + "java/io/"); kSpecialCasesArrayPrefix.put(java.rmi.Remote.class, kValuePrefix + kSequencePrefix + kCORBAPrefix); } public static final Hashtable kSpecialPrimitives = new Hashtable(); static { kSpecialPrimitives.put("int","long"); kSpecialPrimitives.put("long","longlong"); kSpecialPrimitives.put("byte","octet"); } /** * Used to convert ascii to hex. */ private static final byte ASCII_HEX[] = { (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', (byte)'8', (byte)'9', (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', }; // bug fix for 4328952; to eliminate possibility of overriding this // in a subclass. public static final RepositoryIdCache_1_3_1 cache = new RepositoryIdCache_1_3_1(); // Interface Rep ID Strings public static final String kjava_rmi_Remote = createForAnyType(java.rmi.Remote.class); public static final String korg_omg_CORBA_Object = createForAnyType(org.omg.CORBA.Object.class); // Dummy arguments for getIdFromHelper method public static final Class kNoParamTypes[] ={}; public static final Object kNoArgs[] = {}; // To create a RepositoryID, use code similar to the following: // RepositoryId.cache.getId( id ); RepositoryId_1_3_1(){} RepositoryId_1_3_1(String aRepId){ init(aRepId); } RepositoryId_1_3_1 init(String aRepId){ this.repId = aRepId; // Special case for remote if (aRepId.length() == 0) { clazz = java.rmi.Remote.class; typeString = ""; isRMIValueType = true; suid = kInterfaceOnlyHashStr; return this; } else if (aRepId.equals(kWStringValueRepID)) { clazz = java.lang.String.class; typeString = kWStringTypeStr; isIDLType = true; // fix where Attempting to obtain a FullValueDescription // for an RMI value type with a String field causes an exception. completeClassName = "java.lang.String"; versionString = kWStringValueVersion; return this; } else { String repId = convertFromISOLatin1(aRepId); versionString = repId.substring(repId.indexOf(':', repId.indexOf(':')+1)); if (repId.startsWith(kIDLPrefix)) { typeString = repId.substring(kIDLPrefixLength, repId.indexOf(':', kIDLPrefixLength)); isIDLType = true; if (typeString.startsWith(kIDLNamePrefix)) completeClassName = kIDLClassnamePrefix + typeString.substring(kIDLNamePrefix.length()).replace('/','.'); else completeClassName = typeString.replace('/','.'); } else if (repId.startsWith(kValuePrefix)) { typeString = repId.substring(kValuePrefixLength, repId.indexOf(':', kValuePrefixLength)); isRMIValueType = true; if (versionString.indexOf('.') == -1) { actualSuid = versionString.substring(1); suid = actualSuid; // default if not explicitly specified if (actualSuid.indexOf(':') != -1){ // we have a declared hash also int pos = actualSuid.indexOf(':')+1; // actualSuid = suid.substring(pos); // suid = suid.substring(0, pos-1); suid = actualSuid.substring(pos); actualSuid = actualSuid.substring(0, pos-1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -