diff options
Diffstat (limited to 'java/openjdk6/files/icedtea/security/20130201/8000631.patch')
| -rw-r--r-- | java/openjdk6/files/icedtea/security/20130201/8000631.patch | 3964 |
1 files changed, 3964 insertions, 0 deletions
diff --git a/java/openjdk6/files/icedtea/security/20130201/8000631.patch b/java/openjdk6/files/icedtea/security/20130201/8000631.patch new file mode 100644 index 000000000000..bdf6781e30a5 --- /dev/null +++ b/java/openjdk6/files/icedtea/security/20130201/8000631.patch @@ -0,0 +1,3964 @@ +# HG changeset patch +# User coffeys +# Date 1354992561 0 +# Node ID c5203e9e0e07559914a9c46dbba4fe85df945624 +# Parent 7f904eacf818c104549b94b957f34896a8548d9b +8000631: Restrict access to class constructor +Reviewed-by: alanb, ahgross + +diff --git a/make/com/sun/corba/minclude/com_sun_corba_se_impl_orbutil.jmk b/make/com/sun/corba/minclude/com_sun_corba_se_impl_orbutil.jmk +--- corba/make/com/sun/corba/minclude/com_sun_corba_se_impl_orbutil.jmk ++++ corba/make/com/sun/corba/minclude/com_sun_corba_se_impl_orbutil.jmk +@@ -1,5 +1,5 @@ + # +-# Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. ++# Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + # + # This code is free software; you can redistribute it and/or modify it +@@ -29,10 +29,6 @@ com_sun_corba_se_impl_orbutil_java = \ + com/sun/corba/se/impl/orbutil/DenseIntMapImpl.java \ + com/sun/corba/se/impl/orbutil/GetPropertyAction.java \ + com/sun/corba/se/impl/orbutil/HexOutputStream.java \ +- com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3.java \ +- com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3_1.java \ +- com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3.java \ +- com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3_1.java \ + com/sun/corba/se/impl/orbutil/LegacyHookGetFields.java \ + com/sun/corba/se/impl/orbutil/LegacyHookPutFields.java \ + com/sun/corba/se/impl/orbutil/LogKeywords.java \ +@@ -45,19 +41,11 @@ com_sun_corba_se_impl_orbutil_java = \ + com/sun/corba/se/impl/orbutil/ORBUtility.java \ + com/sun/corba/se/impl/orbutil/ORBClassLoader.java \ + com/sun/corba/se/impl/orbutil/RepIdDelegator.java \ +- com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3.java \ +- com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3_1.java \ +- com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3.java \ +- com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java \ + com/sun/corba/se/impl/orbutil/RepositoryIdFactory.java \ + com/sun/corba/se/impl/orbutil/RepositoryIdStrings.java \ + com/sun/corba/se/impl/orbutil/RepositoryIdUtility.java \ + com/sun/corba/se/impl/orbutil/RepositoryIdInterface.java \ +- com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3_1.java \ +- com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java \ + com/sun/corba/se/impl/orbutil/StackImpl.java \ +- com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3_1.java \ +- com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3.java \ + com/sun/corba/se/impl/orbutil/closure/Future.java \ + com/sun/corba/se/impl/orbutil/closure/Constant.java \ + com/sun/corba/se/impl/orbutil/concurrent/Sync.java \ +diff --git a/src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java b/src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java +--- corba/src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java ++++ corba/src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. ++ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it +@@ -1218,7 +1218,7 @@ public class AnyImpl extends Any + // See bug 4391648 for more info about the tcORB in this + // case. + RepositoryIdStrings repStrs +- = RepositoryIdFactory.getRepIdStringsFactory(tcORB); ++ = RepositoryIdFactory.getRepIdStringsFactory(); + + + // Assertion: c instanceof Serializable? +@@ -1251,7 +1251,7 @@ public class AnyImpl extends Any + // Anything else + // We know that this is a TypeCodeImpl since it is our ORB + classTC = (TypeCodeImpl)ValueUtility.createTypeCodeForClass( +- tcORB, c, ORBUtility.createValueHandler(tcORB)); ++ tcORB, c, ORBUtility.createValueHandler()); + // Intruct classTC to store its buffer + classTC.setCaching(true); + // Update the cache +diff --git a/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java b/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java +--- corba/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java ++++ corba/src/share/classes/com/sun/corba/se/impl/encoding/CDRInputStream_1_0.java +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. ++ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it +@@ -269,8 +269,8 @@ public class CDRInputStream_1_0 extends + + private final void createRepositoryIdHandlers() + { +- repIdUtil = RepositoryIdFactory.getRepIdUtility(orb); +- repIdStrs = RepositoryIdFactory.getRepIdStringsFactory(orb); ++ repIdUtil = RepositoryIdFactory.getRepIdUtility(); ++ repIdStrs = RepositoryIdFactory.getRepIdStringsFactory(); + } + + public GIOPVersion getGIOPVersion() { +@@ -564,10 +564,7 @@ public class CDRInputStream_1_0 extends + + checkForNegativeLength(len); + +- if (orb != null && ORBUtility.isLegacyORB((ORB)orb)) +- return legacyReadString(len); +- else +- return internalReadString(len); ++ return internalReadString(len); + } + + private final String internalReadString(int len) { +@@ -586,54 +583,6 @@ public class CDRInputStream_1_0 extends + read_octet(); + + return new String(result, 0, getCharConverter().getNumChars()); +- } +- +- private final String legacyReadString(int len) { +- +- // +- // Workaround for ORBs which send string lengths of +- // zero to mean empty string. +- // +- // +- // IMPORTANT: Do not replace 'new String("")' with "", it may result +- // in a Serialization bug (See serialization.zerolengthstring) and +- // bug id: 4728756 for details +- if (len == 0) +- return new String(""); +- +- len--; +- char[] c = new char[len]; +- +- int n = 0; +- while (n < len) { +- int avail; +- int bytes; +- int wanted; +- +- avail = bbwi.buflen - bbwi.position(); +- if (avail <= 0) { +- grow(1, 1); +- avail = bbwi.buflen - bbwi.position(); +- } +- wanted = len - n; +- bytes = (wanted < avail) ? wanted : avail; +- // Microbenchmarks are showing a loop of ByteBuffer.get(int) being +- // faster than ByteBuffer.get(byte[], int, int). +- for (int i=0; i<bytes; i++) { +- c[n+i] = (char) (bbwi.byteBuffer.get(bbwi.position()+i) & 0xFF); +- } +- bbwi.position(bbwi.position() + bytes); +- n += bytes; +- } +- +- // +- // Skip past terminating null byte +- // +- if (bbwi.position() + 1 > bbwi.buflen) +- alignAndCheck(1, 1); +- bbwi.position(bbwi.position() + 1); +- +- return new String(c); + } + + public final String read_string() { +@@ -1045,7 +994,7 @@ public class CDRInputStream_1_0 extends + + try { + if (valueHandler == null) +- valueHandler = ORBUtility.createValueHandler(orb); ++ valueHandler = ORBUtility.createValueHandler(); + + value = valueHandler.readValue(parent, + indirection, +diff --git a/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java b/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java +--- corba/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java ++++ corba/src/share/classes/com/sun/corba/se/impl/encoding/CDROutputStream_1_0.java +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. ++ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it +@@ -189,18 +189,8 @@ public class CDROutputStream_1_0 extends + + private final void createRepositoryIdHandlers() + { +- if (orb != null) { +- // Get the appropriate versions based on the ORB version. The +- // ORB versioning info is only in the core ORB. +- repIdUtil +- = RepositoryIdFactory.getRepIdUtility(orb); +- repIdStrs +- = RepositoryIdFactory.getRepIdStringsFactory(orb); +- } else { +- // Get the latest versions +- repIdUtil = RepositoryIdFactory.getRepIdUtility(); +- repIdStrs = RepositoryIdFactory.getRepIdStringsFactory(); +- } ++ repIdUtil = RepositoryIdFactory.getRepIdUtility(); ++ repIdStrs = RepositoryIdFactory.getRepIdStringsFactory(); + } + + public BufferManagerWrite getBufferManager() +@@ -705,7 +695,7 @@ public class CDROutputStream_1_0 extends + private void writeArray(Serializable array, Class clazz) { + + if (valueHandler == null) +- valueHandler = ORBUtility.createValueHandler(orb); //d11638 ++ valueHandler = ORBUtility.createValueHandler(); //d11638 + + // Write value_tag + int indirection = writeValueTag(mustChunk, true, +@@ -768,7 +758,7 @@ public class CDROutputStream_1_0 extends + + private void writeRMIIIOPValueType(Serializable object, Class clazz) { + if (valueHandler == null) +- valueHandler = ORBUtility.createValueHandler(orb); //d11638 ++ valueHandler = ORBUtility.createValueHandler(); //d11638 + + Serializable key = object; + +diff --git a/src/share/classes/com/sun/corba/se/impl/io/FVDCodeBaseImpl.java b/src/share/classes/com/sun/corba/se/impl/io/FVDCodeBaseImpl.java +--- corba/src/share/classes/com/sun/corba/se/impl/io/FVDCodeBaseImpl.java ++++ corba/src/share/classes/com/sun/corba/se/impl/io/FVDCodeBaseImpl.java +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved. ++ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it +@@ -86,7 +86,7 @@ public class FVDCodeBaseImpl extends _Co + // default to using the current ORB version in case the + // vhandler is not set + if (vhandler == null) { +- vhandler = new ValueHandlerImpl(false); ++ vhandler = ValueHandlerImpl.getInstance(false); + } + + // Util.getCodebase may return null which would +@@ -120,7 +120,7 @@ public class FVDCodeBaseImpl extends _Co + // default to using the current ORB version in case the + // vhandler is not set + if (vhandler == null) { +- vhandler = new ValueHandlerImpl(false); ++ vhandler = ValueHandlerImpl.getInstance(false); + } + + try{ +@@ -161,7 +161,7 @@ public class FVDCodeBaseImpl extends _Co + // default to using the current ORB version in case the + // vhandler is not set + if (vhandler == null) { +- vhandler = new ValueHandlerImpl(false); ++ vhandler = ValueHandlerImpl.getInstance(false); + } + + Stack repIds = new Stack(); +diff --git a/src/share/classes/com/sun/corba/se/impl/io/ValueHandlerImpl.java b/src/share/classes/com/sun/corba/se/impl/io/ValueHandlerImpl.java +--- corba/src/share/classes/com/sun/corba/se/impl/io/ValueHandlerImpl.java ++++ corba/src/share/classes/com/sun/corba/se/impl/io/ValueHandlerImpl.java +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. ++ * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it +@@ -53,7 +53,7 @@ import com.sun.corba.se.impl.logging.OMG + import com.sun.corba.se.impl.logging.OMGSystemException; + import com.sun.corba.se.impl.logging.UtilSystemException; + +-public class ValueHandlerImpl implements javax.rmi.CORBA.ValueHandlerMultiFormat { ++public final class ValueHandlerImpl implements javax.rmi.CORBA.ValueHandlerMultiFormat { + + // Property to override our maximum stream format version + public static final String FORMAT_VERSION_PROPERTY +@@ -150,12 +150,20 @@ public class ValueHandlerImpl implements + writeValueWithVersion(out, value, streamFormatVersion); + } + +- public ValueHandlerImpl(){} ++ private ValueHandlerImpl(){} + +- public ValueHandlerImpl(boolean isInputStream) { ++ private ValueHandlerImpl(boolean isInputStream) { + this(); + useHashtables = false; + this.isInputStream = isInputStream; ++ } ++ ++ static ValueHandlerImpl getInstance() { ++ return new ValueHandlerImpl(); ++ } ++ ++ static ValueHandlerImpl getInstance(boolean isInputStream) { ++ return new ValueHandlerImpl(isInputStream); + } + + /** +@@ -458,12 +466,7 @@ public class ValueHandlerImpl implements + return ObjectStreamClass.lookup(value.getClass()).writeReplace(value); + } + +- /** +- * Encapsulates writing of Java char arrays so that the 1.3 subclass +- * can override it without exposing internals across packages. This +- * is a fix for bug 4367783. +- */ +- protected void writeCharArray(org.omg.CORBA_2_3.portable.OutputStream out, ++ private void writeCharArray(org.omg.CORBA_2_3.portable.OutputStream out, + char[] array, + int offset, + int length) +@@ -576,12 +579,7 @@ public class ValueHandlerImpl implements + } + } + +- /** +- * Encapsulates reading of Java char arrays so that the 1.3 subclass +- * can override it without exposing internals across packages. This +- * is a fix for bug 4367783. +- */ +- protected void readCharArray(org.omg.CORBA_2_3.portable.InputStream in, ++ private void readCharArray(org.omg.CORBA_2_3.portable.InputStream in, + char[] array, + int offset, + int length) +@@ -795,7 +793,7 @@ public class ValueHandlerImpl implements + return RepositoryId.cache.getId(repId).isSequence(); + } + +- protected String getOutputStreamClassName() { ++ private String getOutputStreamClassName() { + return "com.sun.corba.se.impl.io.IIOPOutputStream"; + } + +@@ -843,29 +841,11 @@ public class ValueHandlerImpl implements + private IIOPOutputStream createOutputStreamBuiltInNoPriv( + final String name + ) throws IOException { +- return +- name.equals( +- IIOPOutputStream +- .class.getName() +- ) ? +- new IIOPOutputStream() : +- +- name.equals( +- com.sun.corba.se.impl.orbutil.IIOPOutputStream_1_3 +- .class.getName() +- ) ? +- new com.sun.corba.se.impl.orbutil.IIOPOutputStream_1_3() : +- +- name.equals( +- com.sun.corba.se.impl.orbutil.IIOPOutputStream_1_3_1 +- .class.getName() +- ) ? +- new com.sun.corba.se.impl.orbutil.IIOPOutputStream_1_3_1() : +- +- null; ++ return name.equals(IIOPOutputStream.class.getName()) ? ++ new IIOPOutputStream() : null; + } + +- protected String getInputStreamClassName() { ++ private String getInputStreamClassName() { + return "com.sun.corba.se.impl.io.IIOPInputStream"; + } + +@@ -913,26 +893,8 @@ public class ValueHandlerImpl implements + private IIOPInputStream createInputStreamBuiltInNoPriv( + final String name + ) throws IOException { +- return +- name.equals( +- IIOPInputStream +- .class.getName() +- ) ? +- new IIOPInputStream() : +- +- name.equals( +- com.sun.corba.se.impl.orbutil.IIOPInputStream_1_3 +- .class.getName() +- ) ? +- new com.sun.corba.se.impl.orbutil.IIOPInputStream_1_3() : +- +- name.equals( +- com.sun.corba.se.impl.orbutil.IIOPInputStream_1_3_1 +- .class.getName() +- ) ? +- new com.sun.corba.se.impl.orbutil.IIOPInputStream_1_3_1() : +- +- null; ++ return name.equals(IIOPInputStream.class.getName()) ? ++ new IIOPInputStream() : null; + } + + /** +@@ -958,12 +920,7 @@ public class ValueHandlerImpl implements + + } + +- /** +- * Our JDK 1.3 and JDK 1.3.1 behavior subclasses override this. +- * The correct behavior is for a Java char to map to a CORBA wchar, +- * but our older code mapped it to a CORBA char. +- */ +- protected TCKind getJavaCharTCKind() { ++ TCKind getJavaCharTCKind() { + return TCKind.tk_wchar; + } + } +diff --git a/src/share/classes/com/sun/corba/se/impl/io/ValueUtility.java b/src/share/classes/com/sun/corba/se/impl/io/ValueUtility.java +--- corba/src/share/classes/com/sun/corba/se/impl/io/ValueUtility.java ++++ corba/src/share/classes/com/sun/corba/se/impl/io/ValueUtility.java +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved. ++ * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it +@@ -92,6 +92,14 @@ public class ValueUtility { + null, // tk_native 31 + null, // tk_abstract_interface 32 + }; ++ ++ static { ++ sun.corba.SharedSecrets.setJavaCorbaAccess(new sun.corba.JavaCorbaAccess() { ++ public ValueHandlerImpl newValueHandlerImpl() { ++ return ValueHandlerImpl.getInstance(); ++ } ++ }); ++ } + + public static String getSignature(ValueMember member) + throws ClassNotFoundException { +diff --git a/src/share/classes/com/sun/corba/se/impl/javax/rmi/CORBA/Util.java b/src/share/classes/com/sun/corba/se/impl/javax/rmi/CORBA/Util.java +--- corba/src/share/classes/com/sun/corba/se/impl/javax/rmi/CORBA/Util.java ++++ corba/src/share/classes/com/sun/corba/se/impl/javax/rmi/CORBA/Util.java +@@ -112,6 +112,9 @@ import com.sun.corba.se.impl.orbutil.ORB + import com.sun.corba.se.impl.orbutil.ORBClassLoader; + import com.sun.corba.se.impl.logging.UtilSystemException; + import com.sun.corba.se.spi.logging.CORBALogDomains; ++import sun.corba.SharedSecrets; ++import sun.corba.JavaCorbaAccess; ++ + + /** + * Provides utility methods that can be used by stubs and ties to +@@ -125,7 +128,8 @@ public class Util implements javax.rmi.C + // Maps targets to ties. + private static IdentityHashtable exportedServants = new IdentityHashtable(); + +- private static ValueHandlerImpl valueHandlerSingleton = new ValueHandlerImpl(); ++ private static final ValueHandlerImpl valueHandlerSingleton = ++ SharedSecrets.getJavaCorbaAccess().newValueHandlerImpl(); + + private UtilSystemException utilWrapper = UtilSystemException.get( + CORBALogDomains.RPC_ENCODING); +diff --git a/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java b/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java +--- corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java ++++ corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java +@@ -848,7 +848,7 @@ public class ORBImpl extends com.sun.cor + // backward compatability 4365188 + CodeBase cb; + +- ValueHandler vh = ORBUtility.createValueHandler(this); ++ ValueHandler vh = ORBUtility.createValueHandler(); + + cb = (CodeBase)vh.getRunTimeCodeBase(); + return ORBUtility.connectAndGetIOR( this, cb ) ; +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3.java b/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3.java ++++ /dev/null +@@ -1,57 +0,0 @@ +-/* +- * Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +-package com.sun.corba.se.impl.orbutil; +- +-import java.io.*; +-import java.util.Hashtable; +- +-/** +- * Implements legacy behavior from before Ladybird to maintain +- * backwards compatibility. +- */ +-public class IIOPInputStream_1_3 extends com.sun.corba.se.impl.io.IIOPInputStream +-{ +- // The newer version in the io package correctly reads a wstring instead. +- // This concerns bug 4379597. +- protected String internalReadUTF(org.omg.CORBA.portable.InputStream stream) +- { +- return stream.read_string(); +- } +- +- /** +- * Before JDK 1.3.1_01, the PutField/GetField implementation +- * actually sent a Hashtable. +- */ +- public ObjectInputStream.GetField readFields() +- throws IOException, ClassNotFoundException, NotActiveException { +- Hashtable fields = (Hashtable)readObject(); +- return new LegacyHookGetFields(fields); +- } +- +- public IIOPInputStream_1_3() +- throws java.io.IOException { +- super(); +- } +-} +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3_1.java b/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3_1.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3_1.java ++++ /dev/null +@@ -1,54 +0,0 @@ +-/* +- * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +- +-/* +- */ +-package com.sun.corba.se.impl.orbutil; +- +-import java.io.*; +-import java.util.Hashtable; +- +-/** +- * Implements legacy behavior from Ladybird to maintain +- * backwards compatibility. +- */ +-public class IIOPInputStream_1_3_1 extends com.sun.corba.se.impl.io.IIOPInputStream +-{ +- public IIOPInputStream_1_3_1() +- throws java.io.IOException { +- super(); +- } +- +- /** +- * Before JDK 1.3.1_01, the PutField/GetField implementation +- * actually sent a Hashtable. +- */ +- public ObjectInputStream.GetField readFields() +- throws IOException, ClassNotFoundException, NotActiveException { +- +- Hashtable fields = (Hashtable)readObject(); +- return new LegacyHookGetFields(fields); +- } +-} +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3.java b/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3.java ++++ /dev/null +@@ -1,68 +0,0 @@ +-/* +- * Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +-package com.sun.corba.se.impl.orbutil; +- +-import java.io.*; +- +-/** +- * Implements legacy behavior from before Ladybird to maintain +- * backwards compatibility. +- */ +-public class IIOPOutputStream_1_3 extends com.sun.corba.se.impl.io.IIOPOutputStream +-{ +- // We can't assume that the superclass's putFields +- // member will be non-private. We must allow +- // the RI to run on JDK 1.3.1 FCS as well as +- // the JDK 1.3.1_01 patch. +- private ObjectOutputStream.PutField putFields_1_3; +- +- // The newer version in the io package correctly writes a wstring instead. +- // This concerns bug 4379597. +- protected void internalWriteUTF(org.omg.CORBA.portable.OutputStream stream, +- String data) +- { +- stream.write_string(data); +- } +- +- public IIOPOutputStream_1_3() +- throws java.io.IOException { +- super(); +- } +- +- /** +- * Before JDK 1.3.1_01, the PutField/GetField implementation +- * actually sent a Hashtable. +- */ +- public ObjectOutputStream.PutField putFields() +- throws IOException { +- putFields_1_3 = new LegacyHookPutFields(); +- return putFields_1_3; +- } +- +- public void writeFields() +- throws IOException { +- putFields_1_3.write(this); +- } +-} +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3_1.java b/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3_1.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/IIOPOutputStream_1_3_1.java ++++ /dev/null +@@ -1,66 +0,0 @@ +-/* +- * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +- +-/* +- */ +-package com.sun.corba.se.impl.orbutil; +- +-import java.io.*; +-import java.util.Hashtable; +- +-/** +- * Implements legacy behavior from Ladybird to maintain +- * backwards compatibility. +- */ +-public class IIOPOutputStream_1_3_1 extends com.sun.corba.se.impl.io.IIOPOutputStream +-{ +- // We can't assume that the superclass's putFields +- // member will be non-private. We must allow +- // the RI to run on JDK 1.3.1 FCS as well as +- // the JDK 1.3.1_01 patch. +- private ObjectOutputStream.PutField putFields_1_3_1; +- +- public IIOPOutputStream_1_3_1() +- throws java.io.IOException { +- super(); +- } +- +- /** +- * Before JDK 1.3.1_01, the PutField/GetField implementation +- * actually sent a Hashtable. +- */ +- public ObjectOutputStream.PutField putFields() +- throws IOException { +- +- putFields_1_3_1 = new LegacyHookPutFields(); +- return putFields_1_3_1; +- } +- +- public void writeFields() +- throws IOException { +- +- putFields_1_3_1.write(this); +- } +-} +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/ORBUtility.java b/src/share/classes/com/sun/corba/se/impl/orbutil/ORBUtility.java +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/ORBUtility.java ++++ corba/src/share/classes/com/sun/corba/se/impl/orbutil/ORBUtility.java +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. ++ * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it +@@ -160,42 +160,10 @@ public final class ORBUtility { + } + + /** +- * Creates the correct ValueHandler for the given ORB, +- * querying ORBVersion information. If the ORB or +- * ORBVersion is null, gets the ValueHandler from +- * Util.createValueHandler. ++ * Return default ValueHandler + */ +- public static ValueHandler createValueHandler(ORB orb) { +- +- if (orb == null) +- return Util.createValueHandler(); +- +- ORBVersion version = orb.getORBVersion(); +- +- if (version == null) +- return Util.createValueHandler(); +- +- if (version.equals(ORBVersionFactory.getOLD())) +- return new ValueHandlerImpl_1_3(); +- if (version.equals(ORBVersionFactory.getNEW())) +- return new ValueHandlerImpl_1_3_1(); +- ++ public static ValueHandler createValueHandler() { + return Util.createValueHandler(); +- } +- +- /** +- * Returns true if the given ORB could accurately be determined to be a +- * Kestrel or earlier ORB. Note: If passed the ORBSingleton, this will return +- * false. +- */ +- public static boolean isLegacyORB(ORB orb) +- { +- try { +- ORBVersion currentORB = orb.getORBVersion(); +- return currentORB.equals( ORBVersionFactory.getOLD() ) ; +- } catch (SecurityException se) { +- return false; +- } + } + + /** +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3.java b/src/share/classes/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3.java ++++ /dev/null +@@ -1,177 +0,0 @@ +-/* +- * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +- +-package com.sun.corba.se.impl.orbutil; +- +-import org.omg.CORBA.ORB; +-import java.io.Serializable; +-import java.util.Hashtable; +-import java.net.MalformedURLException; +-import com.sun.corba.se.impl.io.TypeMismatchException; +-import com.sun.corba.se.impl.util.RepositoryId; +- +-/** +- * Delegates to the RepositoryId_1_3 implementation in +- * com.sun.corba.se.impl.orbutil. This is necessary to +- * overcome the fact that many of RepositoryId's methods +- * are static. +- */ +-public final class RepIdDelegator_1_3 +- implements RepositoryIdStrings, +- RepositoryIdUtility, +- RepositoryIdInterface +-{ +- // RepositoryIdFactory methods +- +- public String createForAnyType(Class type) { +- return RepositoryId_1_3.createForAnyType(type); +- } +- +- public String createForJavaType(Serializable ser) +- throws TypeMismatchException +- { +- return RepositoryId_1_3.createForJavaType(ser); +- } +- +- public String createForJavaType(Class clz) +- throws TypeMismatchException +- { +- return RepositoryId_1_3.createForJavaType(clz); +- } +- +- public String createSequenceRepID(java.lang.Object ser) { +- return RepositoryId_1_3.createSequenceRepID(ser); +- } +- +- public String createSequenceRepID(Class clazz) { +- return RepositoryId_1_3.createSequenceRepID(clazz); +- } +- +- public RepositoryIdInterface getFromString(String repIdString) { +- return new RepIdDelegator_1_3(RepositoryId_1_3.cache.getId(repIdString)); +- } +- +- // RepositoryIdUtility methods +- +- public boolean isChunkedEncoding(int valueTag) { +- return RepositoryId.isChunkedEncoding(valueTag); +- } +- +- public boolean isCodeBasePresent(int valueTag) { +- return RepositoryId.isCodeBasePresent(valueTag); +- } +- +- public String getClassDescValueRepId() { +- return RepositoryId_1_3.kClassDescValueRepID; +- } +- +- public String getWStringValueRepId() { +- return RepositoryId_1_3.kWStringValueRepID; +- } +- +- public int getTypeInfo(int valueTag) { +- return RepositoryId.getTypeInfo(valueTag); +- } +- +- public int getStandardRMIChunkedNoRepStrId() { +- return RepositoryId.kPreComputed_StandardRMIChunked_NoRep; +- } +- +- public int getCodeBaseRMIChunkedNoRepStrId() { +- return RepositoryId.kPreComputed_CodeBaseRMIChunked_NoRep; +- } +- +- public int getStandardRMIChunkedId() { +- return RepositoryId.kPreComputed_StandardRMIChunked; +- } +- +- public int getCodeBaseRMIChunkedId() { +- return RepositoryId.kPreComputed_CodeBaseRMIChunked; +- } +- +- public int getStandardRMIUnchunkedId() { +- return RepositoryId.kPreComputed_StandardRMIUnchunked; +- } +- +- public int getCodeBaseRMIUnchunkedId() { +- return RepositoryId.kPreComputed_CodeBaseRMIUnchunked; +- } +- +- public int getStandardRMIUnchunkedNoRepStrId() { +- return RepositoryId.kPreComputed_StandardRMIUnchunked_NoRep; +- } +- +- public int getCodeBaseRMIUnchunkedNoRepStrId() { +- return RepositoryId.kPreComputed_CodeBaseRMIUnchunked_NoRep; +- } +- +- // RepositoryIdInterface methods +- +- public Class getClassFromType() throws ClassNotFoundException { +- return delegate.getClassFromType(); +- } +- +- public Class getClassFromType(String codebaseURL) +- throws ClassNotFoundException, MalformedURLException +- { +- return delegate.getClassFromType(codebaseURL); +- } +- +- public Class getClassFromType(Class expectedType, +- String codebaseURL) +- throws ClassNotFoundException, MalformedURLException +- { +- return delegate.getClassFromType(expectedType, codebaseURL); +- } +- +- public String getClassName() { +- return delegate.getClassName(); +- } +- +- // Constructor used for factory/utility cases +- public RepIdDelegator_1_3() {} +- +- // Constructor used by getIdFromString. All non-static +- // RepositoryId methods will use the provided delegate. +- private RepIdDelegator_1_3(RepositoryId_1_3 _delegate) { +- this.delegate = _delegate; +- } +- +- private RepositoryId_1_3 delegate = null; +- +- public String toString() { +- if (delegate != null) +- return delegate.toString(); +- else +- return this.getClass().getName(); +- } +- +- public boolean equals(Object obj) { +- if (delegate != null) +- return delegate.equals(obj); +- else +- return super.equals(obj); +- } +-} +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3_1.java b/src/share/classes/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3_1.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepIdDelegator_1_3_1.java ++++ /dev/null +@@ -1,177 +0,0 @@ +-/* +- * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +- +-package com.sun.corba.se.impl.orbutil; +- +-import org.omg.CORBA.ORB; +-import java.io.Serializable; +-import java.util.Hashtable; +-import java.net.MalformedURLException; +-import com.sun.corba.se.impl.io.TypeMismatchException; +-import com.sun.corba.se.impl.util.RepositoryId; +- +-/** +- * Delegates to the RepositoryId_1_3_1 implementation in +- * com.sun.corba.se.impl.orbutil. This is necessary to +- * overcome the fact that many of RepositoryId's methods +- * are static. +- */ +-public final class RepIdDelegator_1_3_1 +- implements RepositoryIdStrings, +- RepositoryIdUtility, +- RepositoryIdInterface +-{ +- // RepositoryIdFactory methods +- +- public String createForAnyType(Class type) { +- return RepositoryId_1_3_1.createForAnyType(type); +- } +- +- public String createForJavaType(Serializable ser) +- throws TypeMismatchException +- { +- return RepositoryId_1_3_1.createForJavaType(ser); +- } +- +- public String createForJavaType(Class clz) +- throws TypeMismatchException +- { +- return RepositoryId_1_3_1.createForJavaType(clz); +- } +- +- public String createSequenceRepID(java.lang.Object ser) { +- return RepositoryId_1_3_1.createSequenceRepID(ser); +- } +- +- public String createSequenceRepID(Class clazz) { +- return RepositoryId_1_3_1.createSequenceRepID(clazz); +- } +- +- public RepositoryIdInterface getFromString(String repIdString) { +- return new RepIdDelegator_1_3_1(RepositoryId_1_3_1.cache.getId(repIdString)); +- } +- +- // RepositoryIdUtility methods +- +- public boolean isChunkedEncoding(int valueTag) { +- return RepositoryId.isChunkedEncoding(valueTag); +- } +- +- public boolean isCodeBasePresent(int valueTag) { +- return RepositoryId.isCodeBasePresent(valueTag); +- } +- +- public String getClassDescValueRepId() { +- return RepositoryId_1_3_1.kClassDescValueRepID; +- } +- +- public String getWStringValueRepId() { +- return RepositoryId_1_3_1.kWStringValueRepID; +- } +- +- public int getTypeInfo(int valueTag) { +- return RepositoryId.getTypeInfo(valueTag); +- } +- +- public int getStandardRMIChunkedNoRepStrId() { +- return RepositoryId.kPreComputed_StandardRMIChunked_NoRep; +- } +- +- public int getCodeBaseRMIChunkedNoRepStrId() { +- return RepositoryId.kPreComputed_CodeBaseRMIChunked_NoRep; +- } +- +- public int getStandardRMIChunkedId() { +- return RepositoryId.kPreComputed_StandardRMIChunked; +- } +- +- public int getCodeBaseRMIChunkedId() { +- return RepositoryId.kPreComputed_CodeBaseRMIChunked; +- } +- +- public int getStandardRMIUnchunkedId() { +- return RepositoryId.kPreComputed_StandardRMIUnchunked; +- } +- +- public int getCodeBaseRMIUnchunkedId() { +- return RepositoryId.kPreComputed_CodeBaseRMIUnchunked; +- } +- +- public int getStandardRMIUnchunkedNoRepStrId() { +- return RepositoryId.kPreComputed_StandardRMIUnchunked_NoRep; +- } +- +- public int getCodeBaseRMIUnchunkedNoRepStrId() { +- return RepositoryId.kPreComputed_CodeBaseRMIUnchunked_NoRep; +- } +- +- // RepositoryIdInterface methods +- +- public Class getClassFromType() throws ClassNotFoundException { +- return delegate.getClassFromType(); +- } +- +- public Class getClassFromType(String codebaseURL) +- throws ClassNotFoundException, MalformedURLException +- { +- return delegate.getClassFromType(codebaseURL); +- } +- +- public Class getClassFromType(Class expectedType, +- String codebaseURL) +- throws ClassNotFoundException, MalformedURLException +- { +- return delegate.getClassFromType(expectedType, codebaseURL); +- } +- +- public String getClassName() { +- return delegate.getClassName(); +- } +- +- // Constructor used for factory/utility cases +- public RepIdDelegator_1_3_1() {} +- +- // Constructor used by getIdFromString. All non-static +- // RepositoryId methods will use the provided delegate. +- private RepIdDelegator_1_3_1(RepositoryId_1_3_1 _delegate) { +- this.delegate = _delegate; +- } +- +- private RepositoryId_1_3_1 delegate = null; +- +- public String toString() { +- if (delegate != null) +- return delegate.toString(); +- else +- return this.getClass().getName(); +- } +- +- public boolean equals(Object obj) { +- if (delegate != null) +- return delegate.equals(obj); +- else +- return super.equals(obj); +- } +-} +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3.java b/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3.java ++++ /dev/null +@@ -1,108 +0,0 @@ +-/* +- * Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +-/* +- * Licensed Materials - Property of IBM +- * RMI-IIOP v1.0 +- * Copyright IBM Corp. 1998 1999 All Rights Reserved +- * +- */ +- +-package com.sun.corba.se.impl.orbutil; +- +-import java.util.Stack; +-import java.util.Hashtable; +-import java.util.EmptyStackException; +-import java.util.Enumeration; +- +-// Really limited pool - in this case just creating several at a time... +-class RepositoryIdPool_1_3 extends Stack { +- +- private static int MAX_CACHE_SIZE = 4; +- private RepositoryIdCache_1_3 cache; +- +- public final synchronized RepositoryId_1_3 popId() { +- +- try { +- return (RepositoryId_1_3)super.pop(); +- } +- catch(EmptyStackException e) { +- increasePool(5); +- return (RepositoryId_1_3)super.pop(); +- } +- +- } +- +- // Pool management +- final void increasePool(int size) { +- //if (cache.size() <= MAX_CACHE_SIZE) +- for (int i = size; i > 0; i--) +- push(new RepositoryId_1_3()); +- /* +- // _REVISIT_ This will not work w/out either thread tracing or weak references. I am +- // betting that thread tracing almost completely negates benefit of reuse. Until either +- // 1.2 only inclusion or proof to the contrary, I'll leave it this way... +- else { +- int numToReclaim = cache.size() / 2; +- Enumeration keys = cache.keys(); +- Enumeration elements = cache.elements(); +- for (int i = numToReclaim; i > 0; i--) { +- Object key = keys.nextElement(); +- Object element = elements.nextElement(); +- +- push(element); +- cache.remove(key); +- } +- } +- */ +- } +- +- final void setCaches(RepositoryIdCache_1_3 cache) { +- this.cache = cache; +- } +- +-} +- +-public class RepositoryIdCache_1_3 extends Hashtable { +- +- private RepositoryIdPool_1_3 pool = new RepositoryIdPool_1_3(); +- +- public RepositoryIdCache_1_3() { +- pool.setCaches(this); +- } +- +- public final synchronized RepositoryId_1_3 getId(String key) { +- RepositoryId_1_3 repId = (RepositoryId_1_3)super.get(key); +- +- if (repId != null) +- return repId; +- else { +- //repId = pool.popId().init(key); +- repId = new RepositoryId_1_3(key); +- put(key, repId); +- return repId; +- } +- +- } +-} +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3_1.java b/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3_1.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdCache_1_3_1.java ++++ /dev/null +@@ -1,102 +0,0 @@ +-/* +- * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +- +-package com.sun.corba.se.impl.orbutil; +- +-import java.util.Stack; +-import java.util.Hashtable; +-import java.util.EmptyStackException; +-import java.util.Enumeration; +- +-// Really limited pool - in this case just creating several at a time... +-class RepositoryIdPool_1_3_1 extends Stack { +- +- private static int MAX_CACHE_SIZE = 4; +- private RepositoryIdCache_1_3_1 cache; +- +- public final synchronized RepositoryId_1_3_1 popId() { +- +- try { +- return (RepositoryId_1_3_1)super.pop(); +- } +- catch(EmptyStackException e) { +- increasePool(5); +- return (RepositoryId_1_3_1)super.pop(); +- } +- +- } +- +- // Pool management +- final void increasePool(int size) { +- //if (cache.size() <= MAX_CACHE_SIZE) +- for (int i = size; i > 0; i--) +- push(new RepositoryId_1_3_1()); +- /* +- // _REVISIT_ This will not work w/out either thread tracing or weak references. I am +- // betting that thread tracing almost completely negates benefit of reuse. Until either +- // 1.2 only inclusion or proof to the contrary, I'll leave it this way... +- else { +- int numToReclaim = cache.size() / 2; +- Enumeration keys = cache.keys(); +- Enumeration elements = cache.elements(); +- for (int i = numToReclaim; i > 0; i--) { +- Object key = keys.nextElement(); +- Object element = elements.nextElement(); +- +- push(element); +- cache.remove(key); +- } +- } +- */ +- } +- +- final void setCaches(RepositoryIdCache_1_3_1 cache) { +- this.cache = cache; +- } +- +-} +- +-public class RepositoryIdCache_1_3_1 extends Hashtable { +- +- private RepositoryIdPool_1_3_1 pool = new RepositoryIdPool_1_3_1(); +- +- public RepositoryIdCache_1_3_1() { +- pool.setCaches(this); +- } +- +- public final synchronized RepositoryId_1_3_1 getId(String key) { +- RepositoryId_1_3_1 repId = (RepositoryId_1_3_1)super.get(key); +- +- if (repId != null) +- return repId; +- else { +- //repId = pool.popId().init(key); +- repId = new RepositoryId_1_3_1(key); +- put(key, repId); +- return repId; +- } +- +- } +-} +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdFactory.java b/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdFactory.java +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdFactory.java ++++ corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryIdFactory.java +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. ++ * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it +@@ -30,12 +30,6 @@ import com.sun.corba.se.spi.orb.ORB; + + public abstract class RepositoryIdFactory + { +- private static final RepIdDelegator_1_3 legacyDelegator +- = new RepIdDelegator_1_3(); +- +- private static final RepIdDelegator_1_3_1 ladybirdDelegator +- = new RepIdDelegator_1_3_1(); +- + private static final RepIdDelegator currentDelegator + = new RepIdDelegator(); + +@@ -48,29 +42,6 @@ public abstract class RepositoryIdFactor + } + + /** +- * Checks the version of the ORB and returns the appropriate +- * RepositoryIdStrings instance. +- */ +- public static RepositoryIdStrings getRepIdStringsFactory(ORB orb) +- { +- if (orb != null) { +- switch (orb.getORBVersion().getORBType()) { +- case ORBVersion.NEWER: +- case ORBVersion.FOREIGN: +- case ORBVersion.JDK1_3_1_01: +- return currentDelegator; +- case ORBVersion.OLD: +- return legacyDelegator; +- case ORBVersion.NEW: +- return ladybirdDelegator; +- default: +- return currentDelegator; +- } +- } else +- return currentDelegator; +- } +- +- /** + * Returns the latest version RepositoryIdUtility instance + */ + public static RepositoryIdUtility getRepIdUtility() +@@ -78,26 +49,4 @@ public abstract class RepositoryIdFactor + return currentDelegator; + } + +- /** +- * Checks the version of the ORB and returns the appropriate +- * RepositoryIdUtility instance. +- */ +- public static RepositoryIdUtility getRepIdUtility(ORB orb) +- { +- if (orb != null) { +- switch (orb.getORBVersion().getORBType()) { +- case ORBVersion.NEWER: +- case ORBVersion.FOREIGN: +- case ORBVersion.JDK1_3_1_01: +- return currentDelegator; +- case ORBVersion.OLD: +- return legacyDelegator; +- case ORBVersion.NEW: +- return ladybirdDelegator; +- default: +- return currentDelegator; +- } +- } else +- return currentDelegator; +- } + } +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java b/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3.java ++++ /dev/null +@@ -1,990 +0,0 @@ +-/* +- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +-/* +- * Licensed Materials - Property of IBM +- * RMI-IIOP v1.0 +- * Copyright IBM Corp. 1998 1999 All Rights Reserved +- * +- */ +- +-package com.sun.corba.se.impl.orbutil; +- +-import java.util.StringTokenizer; +-import java.util.Hashtable; +-import java.io.IOException; +-import java.lang.reflect.Method; +- +-// Imports for using codebase URL to load class +-import java.net.MalformedURLException; +-import org.omg.CORBA.portable.ValueBase; +-import org.omg.CORBA.portable.IDLEntity; +- +-import com.sun.corba.se.impl.util.JDKBridge; +-import com.sun.corba.se.impl.util.Utility; +-import com.sun.corba.se.impl.util.PackagePrefixChecker; +-import com.sun.corba.se.impl.util.IdentityHashtable; +-import com.sun.corba.se.impl.io.ObjectStreamClass; +- +-import javax.rmi.CORBA.Util; +- +-// keeping the original RepositoryId class that was shipped in +-// JDK 1.3. It has interoperability bugs +- +-public class RepositoryId_1_3 { +- +- // 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 RepositoryIdCache_1_3 cache = new RepositoryIdCache_1_3(); +- private 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 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.kDefaultUID, actualSuidLong = ObjectStreamClass.kDefaultUID; +- +- // Repository ID fragments +- 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, 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 +- public static final String kClassDescValueHash = ":" + Long.toHexString( +- ObjectStreamClass.getSerialVersionUID(javax.rmi.CORBA.ClassDesc.class)); +- 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 = ""; +- +- private 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())); +- +- } +- +- private 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); +- } +- +- private 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); +- } +- +- +- private 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); +- } +- +- private 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); +- } +- +- private 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); +- } +- +- private 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', +- }; +- +- +- // 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[] = {}; +- +- +- RepositoryId_1_3(){} +- +- RepositoryId_1_3(String aRepId){ +- init(aRepId); +- } +- +- RepositoryId_1_3 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; +- 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); +- } +- +- } +- else { +- // _REVISIT_ : Special case version failure ? +- } +- } +- else isSupportedFormat = false; +- +- if (typeString.startsWith(kSequencePrefix)) { +- isSequence = true; +- } +- +- +- return this; +- } +- } +- +- public final String getUnqualifiedName() { +- if (unqualifiedName == null){ +- String className = getClassName(); +- int index = (className != null) ? className.lastIndexOf('.') : -1; +- if (index == -1){ +- unqualifiedName = className; +- definedInId = "IDL::1.0"; +- } +- else { +- unqualifiedName = className.substring(index); +- definedInId = "IDL:" + className.substring(0, index).replace('.','/') + ":1.0"; +- } +- } +- +- return unqualifiedName; +- } +- +- public final String getDefinedInId() { +- if (definedInId == null){ +- getUnqualifiedName(); +- } +- +- return definedInId; +- } +- +- public final String getTypeString() { +- return typeString; +- } +- +- public final String getVersionString() { +- return versionString; +- } +- +- public final String getSerialVersionUID() { +- return suid; +- } +- +- public final String getActualSerialVersionUID() { +- return actualSuid; +- } +- public final long getSerialVersionUIDAsLong() { +- return suidLong; +- } +- +- public final long getActualSerialVersionUIDAsLong() { +- return actualSuidLong; +- } +- +- public final boolean isRMIValueType() { +- return isRMIValueType; +- } +- +- public final boolean isIDLType() { +- return isIDLType; +- } +- +- public final String getRepositoryId() { +- return repId; +- } +- +- public static byte[] getByteArray(String repStr) { +- synchronized (repStrToByteArray){ +- return (byte[]) repStrToByteArray.get(repStr); +- } +- } +- +- public static void setByteArray(String repStr, byte[] repStrBytes) { +- synchronized (repStrToByteArray){ +- repStrToByteArray.put(repStr, repStrBytes); +- } +- } +- +- public final boolean isSequence() { +- return isSequence; +- } +- +- public final boolean isSupportedFormat() { +- return isSupportedFormat; +- } +- +- +- // This method will return the classname from the typestring OR if the classname turns out to be +- // a special class "pseudo" name, then the matching real classname is returned. +- public final String getClassName() { +- +- if (isRMIValueType) +- return typeString; +- else if (isIDLType) +- return completeClassName; +- else return null; +- +- } +- +- // This method calls getClazzFromType() and falls back to the repStrToClass +- // cache if no class was found. It's used where any class matching the +- // given repid is an acceptable result. +- public final Class getAnyClassFromType() throws ClassNotFoundException { +- try { +- return getClassFromType(); +- } catch (ClassNotFoundException cnfe) { +- Class clz = (Class)repStrToClass.get(repId); +- if (clz != null) +- return clz; +- else +- throw cnfe; +- } +- } +- +- public final Class getClassFromType() +- throws ClassNotFoundException { +- if (clazz != null) +- return clazz; +- +- Class specialCase = (Class)kSpecialCasesClasses.get(getClassName()); +- +- if (specialCase != null){ +- clazz = specialCase; +- return specialCase; +- } +- else +- { +- try{ +- return Util.loadClass(getClassName(), null, null); +- } +- catch(ClassNotFoundException cnfe){ +- if (defaultServerURL != null) { +- try{ +- return getClassFromType(defaultServerURL); +- } +- catch(MalformedURLException mue){ +- throw cnfe; +- } +- } +- else throw cnfe; +- } +- } +- +- } +- +- public final Class getClassFromType(Class expectedType, String codebase) +- throws ClassNotFoundException { +- if (clazz != null) +- return clazz; +- +- Class specialCase = (Class)kSpecialCasesClasses.get(getClassName()); +- +- if (specialCase != null){ +- clazz = specialCase; +- return specialCase; +- } else { +- ClassLoader expectedTypeClassLoader = (expectedType == null ? null : expectedType.getClassLoader()); +- return loadClassOfType(getClassName(), +- codebase, +- expectedTypeClassLoader, +- expectedType, +- expectedTypeClassLoader); +- } +- +- } +- +- public final Class getClassFromType(String url) +- throws ClassNotFoundException, MalformedURLException { +- return Util.loadClass(getClassName(), url, null); +- } +- +- public final String toString() { +- return repId; +- } +- +- private static String createHashString(java.io.Serializable ser) { +- +- return createHashString(ser.getClass()); +- } +- +- private static String createHashString(java.lang.Class clazz) { +- +- if (clazz.isInterface() || !java.io.Serializable.class.isAssignableFrom(clazz)) +- return kInterfaceHashCode; +- +- +- long actualLong = ObjectStreamClassUtil_1_3.computeStructuralUID(false, clazz); +- String hash = null; +- if (actualLong == 0) +- hash = kInterfaceOnlyHashStr; +- else if (actualLong == 1) +- hash = kExternalizableHashStr; +- else +- hash = Long.toHexString(actualLong).toUpperCase(); +- while(hash.length() < 16){ +- hash = "0" + hash; +- } +- +- long declaredLong = ObjectStreamClassUtil_1_3.computeSerialVersionUID(clazz); +- String declared = null; +- if (declaredLong == 0) +- declared = kInterfaceOnlyHashStr; +- else if (declaredLong == 1) +- declared = kExternalizableHashStr; +- else +- declared = Long.toHexString(declaredLong).toUpperCase(); +- while (declared.length() < 16){ +- declared = "0" + declared; +- } +- hash = hash + ":" + declared; +- +- return ":" + hash; +- } +- +- /** +- * Creates a repository ID for a sequence. This is for expert users only as +- * this method assumes the object passed is an array. If passed an object +- * that is not an array, it will produce a rep id for a sequence of zero +- * length. This would be an error. +- * @param ser The Java object to create a repository ID for +- **/ +- public static String createSequenceRepID(java.lang.Object ser){ +- return createSequenceRepID(ser.getClass()); +- } +- +- /** +- * Creates a repository ID for a sequence. This is for expert users only as +- * this method assumes the object passed is an array. If passed an object +- * that is not an array, it will produce a malformed rep id. +- * @param clazz The Java class to create a repository ID for +- **/ +- public static String createSequenceRepID(java.lang.Class clazz){ +- synchronized (classSeqToRepStr){ +- +- String repid = (String)classSeqToRepStr.get(clazz); +- if (repid != null) +- return repid; +- +- Class originalClazz = clazz; +- +- Class type = null; +- int numOfDims = 0; +- +- while ((type = clazz.getComponentType()) != null) { +- numOfDims++; +- clazz = type; +- } +- +- if (clazz.isPrimitive()) +- repid = kValuePrefix + originalClazz.getName() + kPrimitiveSequenceValueHash; +- else { +- StringBuffer buf = new StringBuffer(); +- buf.append(kValuePrefix); +- while(numOfDims-- > 0) { +- buf.append("["); +- } +- buf.append("L"); +- buf.append(convertToISOLatin1(clazz.getName())); +- buf.append(";"); +- buf.append(createHashString(clazz)); +- repid = buf.toString(); +- } +- classSeqToRepStr.put(originalClazz,repid); +- return repid; +- } +- +- } +- +- +- public static String createForSpecialCase(java.lang.Class clazz){ +- if (clazz.isArray()){ +- return createSequenceRepID(clazz); +- } +- else { +- return (String)kSpecialCasesRepIDs.get(clazz); +- } +- } +- +- public static String createForSpecialCase(java.io.Serializable ser){ +- Class clazz = ser.getClass(); +- if (clazz.isArray()){ +- return createSequenceRepID(ser); +- } +- else +- return createForSpecialCase(clazz); +- } +- +- /** +- * Creates a repository ID for a normal Java Type. +- * @param ser The Java object to create a repository ID for +- * @exception com.sun.corba.se.impl.io.TypeMismatchException if ser implements the +- * org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type. +- **/ +- public static String createForJavaType(java.io.Serializable ser) +- throws com.sun.corba.se.impl.io.TypeMismatchException +- { +- synchronized (classToRepStr) { +- String repid = createForSpecialCase(ser); +- if (repid != null) +- return repid; +- Class clazz = ser.getClass(); +- repid = (String)classToRepStr.get(clazz); +- +- if (repid != null) +- return repid; +- +- repid = kValuePrefix + convertToISOLatin1(clazz.getName()) + +- createHashString(clazz); +- +- classToRepStr.put(clazz, repid); +- repStrToClass.put(repid, clazz); +- return repid; +- } +- } +- +- /** +- * Creates a repository ID for a normal Java Type. +- * @param clz The Java class to create a repository ID for +- * @exception com.sun.corba.se.impl.io.TypeMismatchException if ser implements the +- * org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type. +- **/ +- public static String createForJavaType(Class clz) +- throws com.sun.corba.se.impl.io.TypeMismatchException +- { +- synchronized (classToRepStr){ +- String repid = createForSpecialCase(clz); +- if (repid != null) +- return repid; +- +- repid = (String)classToRepStr.get(clz); +- if (repid != null) +- return repid; +- +- repid = kValuePrefix + convertToISOLatin1(clz.getName()) + +- createHashString(clz); +- +- classToRepStr.put(clz, repid); +- repStrToClass.put(repid, clz); +- return repid; +- } +- } +- +- /** +- * Creates a repository ID for an IDL Java Type. +- * @param ser The IDL Value object to create a repository ID for +- * @param major The major version number +- * @param minor The minor version number +- * @exception com.sun.corba.se.impl.io.TypeMismatchException if ser does not implement the +- * org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type. +- **/ +- public static String createForIDLType(Class ser, int major, int minor) +- throws com.sun.corba.se.impl.io.TypeMismatchException +- { +- synchronized (classIDLToRepStr){ +- String repid = (String)classIDLToRepStr.get(ser); +- if (repid != null) +- return repid; +- +- repid = kIDLPrefix + convertToISOLatin1(ser.getName()).replace('.','/') + +- ":" + major + "." + minor; +- classIDLToRepStr.put(ser, repid); +- return repid; +- } +- } +- +- private static String getIdFromHelper(Class clazz){ +- try { +- Class helperClazz = Utility.loadClassForClass(clazz.getName()+"Helper", null, +- clazz.getClassLoader(), clazz, clazz.getClassLoader()); +- Method idMethod = helperClazz.getDeclaredMethod("id", kNoParamTypes); +- return (String)idMethod.invoke(null, kNoArgs); +- } +- catch(java.lang.ClassNotFoundException cnfe) +- { +- throw new org.omg.CORBA.MARSHAL(cnfe.toString()); +- } +- catch(java.lang.NoSuchMethodException nsme) +- { +- throw new org.omg.CORBA.MARSHAL(nsme.toString()); +- } +- catch(java.lang.reflect.InvocationTargetException ite) +- { +- throw new org.omg.CORBA.MARSHAL(ite.toString()); +- } +- catch(java.lang.IllegalAccessException iae) +- { +- throw new org.omg.CORBA.MARSHAL(iae.toString()); +- } +- } +- +- /** +- * Createa a repository ID for the type if it is either a java type +- * or an IDL type. +- * @param type The type to create rep. id for +- * @return The rep. id. +- **/ +- public static String createForAnyType(Class type) { +- try{ +- if (type.isArray()) +- return createSequenceRepID(type); +- else if (IDLEntity.class.isAssignableFrom(type)) +- { +- try{ +- return getIdFromHelper(type); +- } +- catch(Throwable t) { +- return createForIDLType(type, 1, 0); +- } +- } +- else return createForJavaType(type); +- } +- catch(com.sun.corba.se.impl.io.TypeMismatchException e){ +- return null; +- } +- +- } +- +- public static boolean isAbstractBase(Class clazz) { +- return (clazz.isInterface() && +- IDLEntity.class.isAssignableFrom(clazz) && +- (!ValueBase.class.isAssignableFrom(clazz)) && +- (!org.omg.CORBA.Object.class.isAssignableFrom(clazz))); +- +- } +- +- /** +- * Convert strings with illegal IDL identifier characters. +- * <p> +- * Section 5.5.7 of OBV spec. +- */ +- private static String convertToISOLatin1 (String name) { +- +- int length = name.length(); +- if (length == 0) { +- return name; +- } +- StringBuffer buffer = null; +- +- for (int i = 0; i < length; i++) { +- +- char c = name.charAt(i); +- +- if (c > 255 || IDL_IDENTIFIER_CHARS[c] == 0) { +- +- // We gotta convert. Have we already started? +- +- if (buffer == null) { +- +- // No, so get set up... +- +- buffer = new StringBuffer(name.substring(0,i)); +- } +- +- // Convert the character into the IDL escape syntax... +- buffer.append( +- "\\U" + +- (char)ASCII_HEX[(c & 0xF000) >>> 12] + +- (char)ASCII_HEX[(c & 0x0F00) >>> 8] + +- (char)ASCII_HEX[(c & 0x00F0) >>> 4] + +- (char)ASCII_HEX[(c & 0x000F)]); +- +- } else { +- if (buffer != null) { +- buffer.append(c); +- } +- } +- } +- +- if (buffer != null) { +- name = buffer.toString(); +- } +- +- return name; +- } +- +- /** +- * Convert strings with ISO Latin 1 escape sequences back to original strings. +- * <p> +- * Section 5.5.7 of OBV spec. +- */ +- private static String convertFromISOLatin1 (String name) { +- +- int index = -1; +- StringBuffer buf = new StringBuffer(name); +- +- while ((index = buf.toString().indexOf("\\U")) != -1){ +- String str = "0000" + buf.toString().substring(index+2, index+6); +- +- // Convert Hexadecimal +- byte[] buffer = new byte[(str.length() - 4) / 2]; +- for (int i=4, j=0; i < str.length(); i +=2, j++) { +- buffer[j] = (byte)((ORBUtility.hexOf(str.charAt(i)) << 4) & 0xF0); +- buffer[j] |= (byte)((ORBUtility.hexOf(str.charAt(i+1)) << 0) & 0x0F); +- } +- buf = new StringBuffer(delete(buf.toString(), index, index+6)); +- buf.insert(index, (char)buffer[1]); +- } +- +- return buf.toString(); +- +- +- } +- +- private static String delete(String str, int from, int to) +- { +- return str.substring(0, from) + str.substring(to, str.length()); +- } +- +- private static String replace(String target, String arg, String source) +- { +- int i = 0; +- i = target.indexOf(arg); +- +- while(i != -1) +- { +- String left = target.substring(0, i); +- String right = target.substring(i+arg.length()); +- target = new String(left+source+right); +- i = target.indexOf(arg); +- } +- return target; +- } +- +- /* +- * Load a class and check that it is assignable to a given type. +- * @param className the class name. +- * @param remoteCodebase the codebase to use. May be null. +- * @param loader the class loader of last resort. May be null. +- * @param expectedType the expected type. May be null. +- * @return the loaded class. +- */ +- private Class loadClassOfType (String className, +- String remoteCodebase, +- ClassLoader loader, +- Class expectedType, +- ClassLoader expectedTypeClassLoader) +- throws ClassNotFoundException { +- +- Class loadedClass = null; +- +- try { +- //Sequence finding of the stubs according to spec +- try{ +- //If-else is put here for speed up of J2EE. +- //According to the OMG spec, the if clause is not dead code. +- //It can occur if some compiler has allowed generation +- //into org.omg.stub hierarchy for non-offending +- //classes. This will encourage people to +- //produce non-offending class stubs in their own hierarchy. +- if(!PackagePrefixChecker +- .hasOffendingPrefix(PackagePrefixChecker +- .withoutPackagePrefix(className))){ +- loadedClass = Util.loadClass +- (PackagePrefixChecker.withoutPackagePrefix(className), +- remoteCodebase, +- loader); +- } else { +- loadedClass = Util.loadClass +- (className, +- remoteCodebase, +- loader); +- } +- } catch (ClassNotFoundException cnfe) { +- loadedClass = Util.loadClass +- (className, +- remoteCodebase, +- loader); +- } +- if (expectedType == null) +- return loadedClass; +- } catch (ClassNotFoundException cnfe) { +- if (expectedType == null) +- throw cnfe; +- } +- +- // If no class was not loaded, or if the loaded class is not of the +- // correct type, make a further attempt to load the correct class +- // using the classloader of the expected type. +- // _REVISIT_ Is this step necessary, or should the Util,loadClass +- // algorithm always produce a valid class if the setup is correct? +- // Does the OMG standard algorithm need to be changed to include +- // this step? +- if (loadedClass == null || !expectedType.isAssignableFrom(loadedClass)) { +- if (expectedType.getClassLoader() != expectedTypeClassLoader) +- throw new IllegalArgumentException("expectedTypeClassLoader not class loader of expectedType."); +- +- if (expectedTypeClassLoader != null) +- loadedClass = expectedTypeClassLoader.loadClass(className); +- else +- loadedClass = ORBClassLoader.loadClass(className); +- } +- +- return loadedClass; +- } +- +- /** +- * Checks to see if the FullValueDescription should be retrieved. +- * @exception Throws IOException if suids do not match or if the repositoryID +- * is not an RMIValueType +- */ +- public static boolean useFullValueDescription(Class clazz, String repositoryID) +- throws IOException{ +- +- String clazzRepIDStr = createForAnyType(clazz); +- +- if (clazzRepIDStr.equals(repositoryID)) +- return false; +- +- RepositoryId_1_3 targetRepid; +- RepositoryId_1_3 clazzRepid; +- +- synchronized(cache) { +- // to avoid race condition where multiple threads could be +- // accessing this method, and their access to the cache may +- // be interleaved giving unexpected results +- +- targetRepid = cache.getId(repositoryID); +- clazzRepid = cache.getId(clazzRepIDStr); +- } +- +- if ((targetRepid.isRMIValueType()) && (clazzRepid.isRMIValueType())){ +- if (!targetRepid.getSerialVersionUID().equals(clazzRepid.getSerialVersionUID())) { +- +- String mssg = "Mismatched serialization UIDs : Source (Rep. ID" + +- clazzRepid + ") = " + +- clazzRepid.getSerialVersionUID() + " whereas Target (Rep. ID " + repositoryID + +- ") = " + targetRepid.getSerialVersionUID(); +- throw new IOException(mssg); +- } else { +- return true; +- } +- } else { +- +- throw new IOException("The repository ID is not of an RMI value type (Expected ID = " + clazzRepIDStr + "; Received ID = " + repositoryID +")"); +- } +- } +-} +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java b/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/RepositoryId_1_3_1.java ++++ /dev/null +@@ -1,1065 +0,0 @@ +-/* +- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +- +-/* +- */ +-package com.sun.corba.se.impl.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.impl.util.JDKBridge; +-//import com.sun.corba.se.impl.util.IdentityHashtable; +-import com.sun.corba.se.impl.util.JDKBridge; +-import com.sun.corba.se.impl.util.Utility; +-import com.sun.corba.se.impl.util.PackagePrefixChecker; +-import com.sun.corba.se.impl.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. +- +- private 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 = ""; +- +- private 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())); +- +- } +- +- private 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); +- } +- +- private 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); +- } +- +- +- private 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); +- } +- +- private 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); +- } +- +- private 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); +- } +- +- private 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); +- } +- +- } +- else { +- // _REVISIT_ : Special case version failure ? +- } +- } +- else isSupportedFormat = false; +- +- if (typeString.startsWith(kSequencePrefix)) { +- isSequence = true; +- } +- +- +- return this; +- } +- } +- +- public final String getUnqualifiedName() { +- if (unqualifiedName == null){ +- String className = getClassName(); +- int index = className.lastIndexOf('.'); +- if (index == -1){ +- unqualifiedName = className; +- definedInId = "IDL::1.0"; +- } +- else { +- unqualifiedName = className.substring(index); +- definedInId = "IDL:" + className.substring(0, index).replace('.','/') + ":1.0"; +- } +- } +- +- return unqualifiedName; +- } +- +- public final String getDefinedInId() { +- if (definedInId == null){ +- getUnqualifiedName(); +- } +- +- return definedInId; +- } +- +- public final String getTypeString() { +- return typeString; +- } +- +- public final String getVersionString() { +- return versionString; +- } +- +- public final String getSerialVersionUID() { +- return suid; +- } +- +- public final String getActualSerialVersionUID() { +- return actualSuid; +- } +- public final long getSerialVersionUIDAsLong() { +- return suidLong; +- } +- +- public final long getActualSerialVersionUIDAsLong() { +- return actualSuidLong; +- } +- +- public final boolean isRMIValueType() { +- return isRMIValueType; +- } +- +- public final boolean isIDLType() { +- return isIDLType; +- } +- +- public final String getRepositoryId() { +- return repId; +- } +- +- public static byte[] getByteArray(String repStr) { +- synchronized (repStrToByteArray){ +- return (byte[]) repStrToByteArray.get(repStr); +- } +- } +- +- public static void setByteArray(String repStr, byte[] repStrBytes) { +- synchronized (repStrToByteArray){ +- repStrToByteArray.put(repStr, repStrBytes); +- } +- } +- +- public final boolean isSequence() { +- return isSequence; +- } +- +- public final boolean isSupportedFormat() { +- return isSupportedFormat; +- } +- +- +- // This method will return the classname from the typestring OR if the classname turns out to be +- // a special class "pseudo" name, then the matching real classname is returned. +- public final String getClassName() { +- +- if (isRMIValueType) +- return typeString; +- else if (isIDLType) +- return completeClassName; +- else return null; +- +- } +- +- // This method calls getClazzFromType() and falls back to the repStrToClass +- // cache if no class was found. It's used where any class matching the +- // given repid is an acceptable result. +- public final Class getAnyClassFromType() throws ClassNotFoundException { +- try { +- return getClassFromType(); +- } catch (ClassNotFoundException cnfe) { +- Class clz = (Class)repStrToClass.get(repId); +- if (clz != null) +- return clz; +- else +- throw cnfe; +- } +- } +- +- public final Class getClassFromType() +- throws ClassNotFoundException { +- if (clazz != null) +- return clazz; +- +- Class specialCase = (Class)kSpecialCasesClasses.get(getClassName()); +- +- if (specialCase != null){ +- clazz = specialCase; +- return specialCase; +- } +- else +- { +- try{ +- return Util.loadClass(getClassName(), null, null); +- } +- catch(ClassNotFoundException cnfe){ +- if (defaultServerURL != null) { +- try{ +- return getClassFromType(defaultServerURL); +- } +- catch(MalformedURLException mue){ +- throw cnfe; +- } +- } +- else throw cnfe; +- } +- } +- +- } +- +- public final Class getClassFromType(Class expectedType, String codebase) +- throws ClassNotFoundException { +- if (clazz != null) +- return clazz; +- +- Class specialCase = (Class)kSpecialCasesClasses.get(getClassName()); +- +- if (specialCase != null){ +- clazz = specialCase; +- return specialCase; +- } else { +- ClassLoader expectedTypeClassLoader = (expectedType == null ? null : expectedType.getClassLoader()); +- return loadClassOfType(getClassName(), +- codebase, +- expectedTypeClassLoader, +- expectedType, +- expectedTypeClassLoader); +- } +- +- } +- +- public final Class getClassFromType(String url) +- throws ClassNotFoundException, MalformedURLException { +- return Util.loadClass(getClassName(), url, null); +- } +- +- public final String toString() { +- return repId; +- } +- +- /** +- * Checks to see if the FullValueDescription should be retrieved. +- * @exception Throws IOException if suids do not match or if the repositoryID +- * is not an RMIValueType +- */ +- public static boolean useFullValueDescription(Class clazz, String repositoryID) +- throws IOException{ +- +- String clazzRepIDStr = createForAnyType(clazz); +- +- if (clazzRepIDStr.equals(repositoryID)) +- return false; +- +- RepositoryId_1_3_1 targetRepid; +- RepositoryId_1_3_1 clazzRepid; +- +- synchronized(cache) { +- // to avoid race condition where multiple threads could be +- // accessing this method, and their access to the cache may +- // be interleaved giving unexpected results +- +- targetRepid = cache.getId(repositoryID); +- clazzRepid = cache.getId(clazzRepIDStr); +- } +- //ObjectStreamClass osc = ObjectStreamClass.lookup(clazz); +- +- if ((targetRepid.isRMIValueType()) && (clazzRepid.isRMIValueType())){ +- if (!targetRepid.getSerialVersionUID().equals(clazzRepid.getSerialVersionUID())) { +- +- String mssg = "Mismatched serialization UIDs : Source (Rep. ID" + +- clazzRepid + ") = " + +- clazzRepid.getSerialVersionUID() + " whereas Target (Rep. ID " + repositoryID + +- ") = " + targetRepid.getSerialVersionUID(); +- //com.sun.corba.se.impl.io.ValueUtility.log("RepositoryId",mssg); +- throw new IOException(mssg); +- } +- else { +- return true; +- } +- } +- else { +- +- throw new IOException("The repository ID is not of an RMI value type (Expected ID = " + clazzRepIDStr + "; Received ID = " + repositoryID +")"); +- } +- } +- +- private static String createHashString(java.io.Serializable ser) { +- +- return createHashString(ser.getClass()); +- } +- +- private static String createHashString(java.lang.Class clazz) { +- +- if (clazz.isInterface() || !java.io.Serializable.class.isAssignableFrom(clazz)) +- return kInterfaceHashCode; +- +- //ObjectStreamClass osc = ObjectStreamClass.lookup(clazz); +- +- long actualLong = ObjectStreamClass_1_3_1.getActualSerialVersionUID(clazz); +- String hash = null; +- if (actualLong == 0) +- hash = kInterfaceOnlyHashStr; +- else if (actualLong == 1) +- hash = kExternalizableHashStr; +- else +- hash = Long.toHexString(actualLong).toUpperCase(); +- while(hash.length() < 16){ +- hash = "0" + hash; +- } +- +- long declaredLong = ObjectStreamClass_1_3_1.getSerialVersionUID(clazz); +- String declared = null; +- if (declaredLong == 0) +- declared = kInterfaceOnlyHashStr; +- else if (declaredLong == 1) +- declared = kExternalizableHashStr; +- else +- declared = Long.toHexString(declaredLong).toUpperCase(); +- while (declared.length() < 16){ +- declared = "0" + declared; +- } +- hash = hash + ":" + declared; +- +- return ":" + hash; +- } +- +- /** +- * Creates a repository ID for a sequence. This is for expert users only as +- * this method assumes the object passed is an array. If passed an object +- * that is not an array, it will produce a rep id for a sequence of zero +- * length. This would be an error. +- * @param ser The Java object to create a repository ID for +- **/ +- public static String createSequenceRepID(java.lang.Object ser){ +- return createSequenceRepID(ser.getClass()); +- } +- +- /** +- * Creates a repository ID for a sequence. This is for expert users only as +- * this method assumes the object passed is an array. If passed an object +- * that is not an array, it will produce a malformed rep id. +- * @param clazz The Java class to create a repository ID for +- **/ +- public static String createSequenceRepID(java.lang.Class clazz){ +- synchronized (classSeqToRepStr){ +- +- String repid = (String)classSeqToRepStr.get(clazz); +- if (repid != null) +- return repid; +- +- Class originalClazz = clazz; +- +- Class type = null; +- int numOfDims = 0; +- +- while ((type = clazz.getComponentType()) != null) { +- numOfDims++; +- clazz = type; +- } +- +- if (clazz.isPrimitive()) +- repid = kValuePrefix + originalClazz.getName() + kPrimitiveSequenceValueHash; +- else { +- StringBuffer buf = new StringBuffer(); +- buf.append(kValuePrefix); +- while(numOfDims-- > 0) { +- buf.append("["); +- } +- buf.append("L"); +- buf.append(convertToISOLatin1(clazz.getName())); +- buf.append(";"); +- buf.append(createHashString(clazz)); +- repid = buf.toString(); +- } +- classSeqToRepStr.put(originalClazz,repid); +- return repid; +- } +- +- } +- +- +- public static String createForSpecialCase(java.lang.Class clazz){ +- if (clazz.isArray()){ +- return createSequenceRepID(clazz); +- } +- else { +- return (String)kSpecialCasesRepIDs.get(clazz); +- } +- } +- +- public static String createForSpecialCase(java.io.Serializable ser){ +- Class clazz = ser.getClass(); +- if (clazz.isArray()){ +- return createSequenceRepID(ser); +- } +- else +- return createForSpecialCase(clazz); +- } +- +- /** +- * Creates a repository ID for a normal Java Type. +- * @param ser The Java object to create a repository ID for +- * @exception com.sun.corba.se.impl.io.TypeMismatchException if ser implements the +- * org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type. +- **/ +- public static String createForJavaType(java.io.Serializable ser) +- throws com.sun.corba.se.impl.io.TypeMismatchException +- { +- synchronized (classToRepStr) { +- String repid = createForSpecialCase(ser); +- if (repid != null) +- return repid; +- Class clazz = ser.getClass(); +- repid = (String)classToRepStr.get(clazz); +- +- if (repid != null) +- return repid; +- +- repid = kValuePrefix + convertToISOLatin1(clazz.getName()) + +- createHashString(clazz); +- +- classToRepStr.put(clazz, repid); +- repStrToClass.put(repid, clazz); +- return repid; +- } +- } +- +- /** +- * Creates a repository ID for a normal Java Type. +- * @param clz The Java class to create a repository ID for +- * @exception com.sun.corba.se.impl.io.TypeMismatchException if ser implements the +- * org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type. +- **/ +- public static String createForJavaType(Class clz) +- throws com.sun.corba.se.impl.io.TypeMismatchException +- { +- synchronized (classToRepStr){ +- String repid = createForSpecialCase(clz); +- if (repid != null) +- return repid; +- +- repid = (String)classToRepStr.get(clz); +- if (repid != null) +- return repid; +- +- repid = kValuePrefix + convertToISOLatin1(clz.getName()) + +- createHashString(clz); +- +- classToRepStr.put(clz, repid); +- repStrToClass.put(repid, clz); +- return repid; +- } +- } +- +- /** +- * Creates a repository ID for an IDL Java Type. +- * @param ser The IDL Value object to create a repository ID for +- * @param major The major version number +- * @param minor The minor version number +- * @exception com.sun.corba.se.impl.io.TypeMismatchException if ser does not implement the +- * org.omg.CORBA.portable.IDLEntity interface which indicates it is an IDL Value type. +- **/ +- public static String createForIDLType(Class ser, int major, int minor) +- throws com.sun.corba.se.impl.io.TypeMismatchException +- { +- synchronized (classIDLToRepStr){ +- String repid = (String)classIDLToRepStr.get(ser); +- if (repid != null) +- return repid; +- +- repid = kIDLPrefix + convertToISOLatin1(ser.getName()).replace('.','/') + +- ":" + major + "." + minor; +- classIDLToRepStr.put(ser, repid); +- return repid; +- } +- } +- +- private static String getIdFromHelper(Class clazz){ +- try { +- Class helperClazz = Utility.loadClassForClass(clazz.getName()+"Helper", null, +- clazz.getClassLoader(), clazz, clazz.getClassLoader()); +- Method idMethod = helperClazz.getDeclaredMethod("id", kNoParamTypes); +- return (String)idMethod.invoke(null, kNoArgs); +- } +- catch(java.lang.ClassNotFoundException cnfe) +- { +- throw new org.omg.CORBA.MARSHAL(cnfe.toString()); +- } +- catch(java.lang.NoSuchMethodException nsme) +- { +- throw new org.omg.CORBA.MARSHAL(nsme.toString()); +- } +- catch(java.lang.reflect.InvocationTargetException ite) +- { +- throw new org.omg.CORBA.MARSHAL(ite.toString()); +- } +- catch(java.lang.IllegalAccessException iae) +- { +- throw new org.omg.CORBA.MARSHAL(iae.toString()); +- } +- } +- +- /** +- * Createa a repository ID for the type if it is either a java type +- * or an IDL type. +- * @param type The type to create rep. id for +- * @return The rep. id. +- **/ +- public static String createForAnyType(Class type) { +- try{ +- if (type.isArray()) +- return createSequenceRepID(type); +- else if (IDLEntity.class.isAssignableFrom(type)) +- { +- try{ +- return getIdFromHelper(type); +- } +- catch(Throwable t) { +- return createForIDLType(type, 1, 0); +- } +- } +- else return createForJavaType(type); +- } +- catch(com.sun.corba.se.impl.io.TypeMismatchException e){ +- return null; +- } +- +- } +- +- public static boolean isAbstractBase(Class clazz) { +- return (clazz.isInterface() && +- IDLEntity.class.isAssignableFrom(clazz) && +- (!ValueBase.class.isAssignableFrom(clazz)) && +- (!org.omg.CORBA.Object.class.isAssignableFrom(clazz))); +- +- } +- +- public static boolean isAnyRequired(Class clazz) { +- return ((clazz == java.lang.Object.class) || +- (clazz == java.io.Serializable.class) || +- (clazz == java.io.Externalizable.class)); +- } +- +- public static long fromHex(String hexNumber) { +- if (hexNumber.startsWith("0x")) +- return Long.valueOf(hexNumber.substring(2), 16).longValue(); +- else return Long.valueOf(hexNumber, 16).longValue(); +- } +- +- /** +- * Convert strings with illegal IDL identifier characters. +- * <p> +- * Section 5.5.7 of OBV spec. +- */ +- private static String convertToISOLatin1 (String name) { +- +- int length = name.length(); +- if (length == 0) { +- return name; +- } +- StringBuffer buffer = null; +- +- for (int i = 0; i < length; i++) { +- +- char c = name.charAt(i); +- +- if (c > 255 || IDL_IDENTIFIER_CHARS[c] == 0) { +- +- // We gotta convert. Have we already started? +- +- if (buffer == null) { +- +- // No, so get set up... +- +- buffer = new StringBuffer(name.substring(0,i)); +- } +- +- // Convert the character into the IDL escape syntax... +- buffer.append( +- "\\U" + +- (char)ASCII_HEX[(c & 0xF000) >>> 12] + +- (char)ASCII_HEX[(c & 0x0F00) >>> 8] + +- (char)ASCII_HEX[(c & 0x00F0) >>> 4] + +- (char)ASCII_HEX[(c & 0x000F)]); +- +- } else { +- if (buffer != null) { +- buffer.append(c); +- } +- } +- } +- +- if (buffer != null) { +- name = buffer.toString(); +- } +- +- return name; +- } +- +- /** +- * Convert strings with ISO Latin 1 escape sequences back to original strings. +- * <p> +- * Section 5.5.7 of OBV spec. +- */ +- private static String convertFromISOLatin1 (String name) { +- +- int index = -1; +- StringBuffer buf = new StringBuffer(name); +- +- while ((index = buf.toString().indexOf("\\U")) != -1){ +- String str = "0000" + buf.toString().substring(index+2, index+6); +- +- // Convert Hexadecimal +- byte[] buffer = new byte[(str.length() - 4) / 2]; +- for (int i=4, j=0; i < str.length(); i +=2, j++) { +- buffer[j] = (byte)((ORBUtility.hexOf(str.charAt(i)) << 4) & 0xF0); +- buffer[j] |= (byte)((ORBUtility.hexOf(str.charAt(i+1)) << 0) & 0x0F); +- } +- buf = new StringBuffer(delete(buf.toString(), index, index+6)); +- buf.insert(index, (char)buffer[1]); +- } +- +- return buf.toString(); +- +- +- } +- +- private static String delete(String str, int from, int to) +- { +- return str.substring(0, from) + str.substring(to, str.length()); +- } +- +- private static String replace(String target, String arg, String source) +- { +- int i = 0; +- i = target.indexOf(arg); +- +- while(i != -1) +- { +- String left = target.substring(0, i); +- String right = target.substring(i+arg.length()); +- target = new String(left+source+right); +- i = target.indexOf(arg); +- } +- return target; +- } +- +- public static int computeValueTag(boolean codeBasePresent, int typeInfo, boolean chunkedEncoding){ +- int value_tag = kInitialValueTag; +- +- if (codeBasePresent) +- value_tag = value_tag | 0x00000001; +- +- value_tag = value_tag | typeInfo; +- +- if (chunkedEncoding) +- value_tag = value_tag | kChunkedMask; +- +- return value_tag; +- } +- +- public static boolean isCodeBasePresent(int value_tag){ +- return ((value_tag & 0x00000001) == 1); +- } +- +- public static int getTypeInfo(int value_tag){ +- return (value_tag & 0x00000006); +- } +- +- public static boolean isChunkedEncoding(int value_tag){ +- return ((value_tag & kChunkedMask) != 0); +- } +- +- public static String getServerURL(){ +- return defaultServerURL; +- } +- +- /* +- * Load a class and check that it is assignable to a given type. +- * @param className the class name. +- * @param remoteCodebase the codebase to use. May be null. +- * @param loader the class loader of last resort. May be null. +- * @param expectedType the expected type. May be null. +- * @return the loaded class. +- */ +- private Class loadClassOfType (String className, +- String remoteCodebase, +- ClassLoader loader, +- Class expectedType, +- ClassLoader expectedTypeClassLoader) +- throws ClassNotFoundException { +- +- Class loadedClass = null; +- +- try { +- //Sequence finding of the stubs according to spec +- try{ +- //If-else is put here for speed up of J2EE. +- //According to the OMG spec, the if clause is not dead code. +- //It can occur if some compiler has allowed generation +- //into org.omg.stub hierarchy for non-offending +- //classes. This will encourage people to +- //produce non-offending class stubs in their own hierarchy. +- if(!PackagePrefixChecker +- .hasOffendingPrefix(PackagePrefixChecker +- .withoutPackagePrefix(className))){ +- loadedClass = Util.loadClass +- (PackagePrefixChecker.withoutPackagePrefix(className), +- remoteCodebase, +- loader); +- } else { +- loadedClass = Util.loadClass +- (className, +- remoteCodebase, +- loader); +- } +- } catch (ClassNotFoundException cnfe) { +- loadedClass = Util.loadClass +- (className, +- remoteCodebase, +- loader); +- } +- if (expectedType == null) +- return loadedClass; +- } catch (ClassNotFoundException cnfe) { +- if (expectedType == null) +- throw cnfe; +- } +- +- // If no class was not loaded, or if the loaded class is not of the +- // correct type, make a further attempt to load the correct class +- // using the classloader of the expected type. +- // _REVISIT_ Is this step necessary, or should the Util,loadClass +- // algorithm always produce a valid class if the setup is correct? +- // Does the OMG standard algorithm need to be changed to include +- // this step? +- if (loadedClass == null || !expectedType.isAssignableFrom(loadedClass)) { +- if (expectedType.getClassLoader() != expectedTypeClassLoader) +- throw new IllegalArgumentException("expectedTypeClassLoader not class loader of expectedType."); +- +- if (expectedTypeClassLoader != null) +- loadedClass = expectedTypeClassLoader.loadClass(className); +- else +- loadedClass = Class.forName(className); +- } +- +- return loadedClass; +- } +-} +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3.java b/src/share/classes/com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3.java ++++ /dev/null +@@ -1,251 +0,0 @@ +-/* +- * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +-/* +- * Licensed Materials - Property of IBM +- * RMI-IIOP v1.0 +- * Copyright IBM Corp. 1998 1999 All Rights Reserved +- * +- */ +- +-package com.sun.corba.se.impl.orbutil; +- +-import javax.rmi.CORBA.Util; +-import javax.rmi.PortableRemoteObject; +- +-import java.util.Hashtable; +-import java.util.Stack; +-import java.io.IOException; +-import java.util.EmptyStackException; +- +-import com.sun.corba.se.impl.util.Utility; +-import com.sun.corba.se.impl.io.IIOPInputStream; +-import com.sun.corba.se.impl.io.IIOPOutputStream; +-import com.sun.corba.se.impl.util.RepositoryId; +-import com.sun.corba.se.impl.util.Utility; +- +-import org.omg.CORBA.TCKind; +-import org.omg.CORBA.MARSHAL; +-import org.omg.CORBA.CompletionStatus; +-import org.omg.CORBA.portable.IndirectionException; +-import com.sun.org.omg.SendingContext.CodeBase; +- +-import java.security.AccessController; +-import java.security.PrivilegedAction; +- +-/** +- * This class overrides behavior of our current ValueHandlerImpl to +- * provide backwards compatibility with JDK 1.3.0. +- */ +-public class ValueHandlerImpl_1_3 extends com.sun.corba.se.impl.io.ValueHandlerImpl { +- +- public ValueHandlerImpl_1_3(){ +- super(); +- } +- +- public ValueHandlerImpl_1_3(boolean isInputStream) { +- super(isInputStream); +- } +- +- /** +- * Writes the value to the stream using java semantics. +- * @param out The stream to write the value to +- * @param value The value to be written to the stream +- **/ +- public void writeValue(org.omg.CORBA.portable.OutputStream _out, java.io.Serializable value) { +- super.writeValue(_out, value); +- } +- +- /** +- * Reads a value from the stream using java semantics. +- * @param in The stream to read the value from +- * @param clazz The type of the value to be read in +- * @param sender The sending context runtime +- **/ +- public java.io.Serializable readValue(org.omg.CORBA.portable.InputStream _in, +- int offset, +- java.lang.Class clazz, +- String repositoryID, +- org.omg.SendingContext.RunTime _sender) +- { +- return super.readValue(_in, offset, clazz, repositoryID, _sender); +- } +- +- /** +- * Returns the repository ID for the given RMI value Class. +- * @param clz The class to return a repository ID for. +- * @return the repository ID of the Class. +- **/ +- public java.lang.String getRMIRepositoryID(java.lang.Class clz) { +- return RepositoryId_1_3.createForJavaType(clz); +- } +- +- /** +- * Indicates whether the given Class performs custom or +- * default marshaling. +- * @param clz The class to test for custom marshaling. +- * @return True if the class performs custom marshaling, false +- * if it does not. +- **/ +- public boolean isCustomMarshaled(java.lang.Class clz) { +- return super.isCustomMarshaled(clz); +- } +- +- /** +- * Returns the CodeBase for this ValueHandler. This is used by +- * the ORB runtime. The server sends the service context containing +- * the IOR for this CodeBase on the first GIOP reply. The clients +- * do the same on the first GIOP request. +- * @return the SendingContext.CodeBase of this ValueHandler. +- **/ +- public org.omg.SendingContext.RunTime getRunTimeCodeBase() { +- return super.getRunTimeCodeBase(); +- } +- +- /** +- * If the value contains a writeReplace method then the result +- * is returned. Otherwise, the value itself is returned. +- * @return the true value to marshal on the wire. +- **/ +- public java.io.Serializable writeReplace(java.io.Serializable value) { +- return super.writeReplace(value); +- } +- +- // methods supported for backward compatability so that the appropriate +- // Rep-id calculations take place based on the ORB version +- +- /** +- * Returns a boolean of whether or not RepositoryId indicates +- * FullValueDescriptor. +- * used for backward compatability +- */ +- +- public boolean useFullValueDescription(Class clazz, String repositoryID) +- throws IOException +- +- { +- return RepositoryId_1_3.useFullValueDescription(clazz, repositoryID); +- } +- +- public String getClassName(String id) +- { +- RepositoryId_1_3 repID = RepositoryId_1_3.cache.getId(id); +- return repID.getClassName(); +- } +- +- public Class getClassFromType(String id) +- throws ClassNotFoundException +- { +- RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); +- return repId.getClassFromType(); +- } +- +- public Class getAnyClassFromType(String id) +- throws ClassNotFoundException +- { +- RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); +- return repId.getAnyClassFromType(); +- } +- +- public String createForAnyType(Class cl) +- { +- return RepositoryId_1_3.createForAnyType(cl); +- } +- +- public String getDefinedInId(String id) +- { +- RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); +- return repId.getDefinedInId(); +- } +- +- public String getUnqualifiedName(String id) +- { +- RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); +- return repId.getUnqualifiedName(); +- } +- +- public String getSerialVersionUID(String id) +- { +- RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); +- return repId.getSerialVersionUID(); +- } +- +- public boolean isAbstractBase(Class clazz) +- { +- return RepositoryId_1_3.isAbstractBase(clazz); +- } +- +- public boolean isSequence(String id) +- { +- RepositoryId_1_3 repId = RepositoryId_1_3.cache.getId(id); +- return repId.isSequence(); +- } +- +- /** +- * Preserves the incorrect 1.3 behavior which truncates Java chars in +- * arrays to 8-bit CORBA chars. Bug 4367783. This enables us to +- * continue interoperating with our legacy ORBs. If this goes into +- * Ladybird, then Ladybird and Kestrel will interoperate as long as +- * people don't use chars greater than 8-bits. +- */ +- protected void writeCharArray(org.omg.CORBA_2_3.portable.OutputStream out, +- char[] array, +- int offset, +- int length) +- { +- out.write_char_array(array, offset, length); +- } +- +- /** +- * Preserves the incorrect 1.3 behavior which truncates Java chars in +- * arrays to 8-bit CORBA chars. Bug 4367783. This enables us to +- * continue interoperating with our legacy ORBs. If this goes into +- * Ladybird, then Ladybird and Kestrel will interoperate as long as +- * people don't use chars greater than 8-bits. +- */ +- protected void readCharArray(org.omg.CORBA_2_3.portable.InputStream in, +- char[] array, +- int offset, +- int length) +- { +- in.read_char_array(array, offset, length); +- } +- +- protected final String getOutputStreamClassName() { +- return "com.sun.corba.se.impl.orbutil.IIOPOutputStream_1_3"; +- } +- +- protected final String getInputStreamClassName() { +- return "com.sun.corba.se.impl.orbutil.IIOPInputStream_1_3"; +- } +- +- /** +- * Our JDK 1.3 and JDK 1.3.1 behavior subclasses override this. +- * The correct behavior is for a Java char to map to a CORBA wchar, +- * but our older code mapped it to a CORBA char. +- */ +- protected TCKind getJavaCharTCKind() { +- return TCKind.tk_char; +- } +-} +diff --git a/src/share/classes/com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3_1.java b/src/share/classes/com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3_1.java +deleted file mode 100644 +--- corba/src/share/classes/com/sun/corba/se/impl/orbutil/ValueHandlerImpl_1_3_1.java ++++ /dev/null +@@ -1,77 +0,0 @@ +-/* +- * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. Oracle designates this +- * particular file as subject to the "Classpath" exception as provided +- * by Oracle in the LICENSE file that accompanied this code. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +-package com.sun.corba.se.impl.orbutil; +- +-import org.omg.CORBA.TCKind; +- +-/** +- * This class overrides behavior of our current ValueHandlerImpl to +- * provide backwards compatibility with JDK 1.3.1. +- */ +-public class ValueHandlerImpl_1_3_1 +- extends com.sun.corba.se.impl.io.ValueHandlerImpl +-{ +- public ValueHandlerImpl_1_3_1() {} +- +- public ValueHandlerImpl_1_3_1(boolean isInputStream) { +- super(isInputStream); +- } +- +- /** +- * Our JDK 1.3 and JDK 1.3.1 behavior subclasses override this. +- * The correct behavior is for a Java char to map to a CORBA wchar, +- * but our older code mapped it to a CORBA char. +- */ +- protected TCKind getJavaCharTCKind() { +- return TCKind.tk_char; +- } +- +- /** +- * RepositoryId_1_3_1 performs an incorrect repId calculation +- * when using serialPersistentFields and one of the fields no longer +- * exists on the class itself. +- */ +- public boolean useFullValueDescription(Class clazz, String repositoryID) +- throws java.io.IOException +- { +- return RepositoryId_1_3_1.useFullValueDescription(clazz, repositoryID); +- } +- +- /** +- * Installs the legacy IIOPOutputStream_1_3_1 which does +- * PutFields/GetFields incorrectly. Bug 4407244. +- */ +- protected final String getOutputStreamClassName() { +- return "com.sun.corba.se.impl.orbutil.IIOPOutputStream_1_3_1"; +- } +- +- /** +- * Installs the legacy IIOPInputStream_1_3_1 which does +- * PutFields/GetFields incorrectly. Bug 4407244. +- */ +- protected final String getInputStreamClassName() { +- return "com.sun.corba.se.impl.orbutil.IIOPInputStream_1_3_1"; +- } +-} +diff --git a/src/share/classes/sun/corba/JavaCorbaAccess.java b/src/share/classes/sun/corba/JavaCorbaAccess.java +new file mode 100644 +--- /dev/null ++++ corba/src/share/classes/sun/corba/JavaCorbaAccess.java +@@ -0,0 +1,32 @@ ++/* ++ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. Oracle designates this ++ * particular file as subject to the "Classpath" exception as provided ++ * by Oracle in the LICENSE file that accompanied this code. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++package sun.corba; ++ ++import com.sun.corba.se.impl.io.ValueHandlerImpl; ++ ++public interface JavaCorbaAccess { ++ public ValueHandlerImpl newValueHandlerImpl(); ++} +diff --git a/src/share/classes/sun/corba/SharedSecrets.java b/src/share/classes/sun/corba/SharedSecrets.java +new file mode 100644 +--- /dev/null ++++ corba/src/share/classes/sun/corba/SharedSecrets.java +@@ -0,0 +1,60 @@ ++/* ++ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. Oracle designates this ++ * particular file as subject to the "Classpath" exception as provided ++ * by Oracle in the LICENSE file that accompanied this code. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++package sun.corba; ++ ++import com.sun.corba.se.impl.io.ValueUtility; ++import sun.misc.Unsafe; ++ ++import java.security.AccessController; ++ ++/** A repository of "shared secrets", which are a mechanism for ++ calling implementation-private methods in another package without ++ using reflection. A package-private class implements a public ++ interface and provides the ability to call package-private methods ++ within that package; the object implementing that interface is ++ provided through a third package to which access is restricted. ++ This framework avoids the primary disadvantage of using reflection ++ for this purpose, namely the loss of compile-time checking. */ ++ ++// SharedSecrets cloned in corba repo to avoid build issues ++public class SharedSecrets { ++ private static final Unsafe unsafe = Unsafe.getUnsafe(); ++ private static JavaCorbaAccess javaCorbaAccess; ++ ++ public static JavaCorbaAccess getJavaCorbaAccess() { ++ if (javaCorbaAccess == null) { ++ // Ensure ValueUtility is initialized; we know that that class ++ // provides the shared secret ++ unsafe.ensureClassInitialized(ValueUtility.class); ++ } ++ return javaCorbaAccess; ++ } ++ ++ public static void setJavaCorbaAccess(JavaCorbaAccess access) { ++ javaCorbaAccess = access; ++ } ++ ++} |
