summaryrefslogtreecommitdiff
path: root/java/openjdk6/files/icedtea/security/20130201/8000631.patch
diff options
context:
space:
mode:
Diffstat (limited to 'java/openjdk6/files/icedtea/security/20130201/8000631.patch')
-rw-r--r--java/openjdk6/files/icedtea/security/20130201/8000631.patch3964
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;
++ }
++
++}