8000631: Restrict access to class constructor
Reviewed-by: alanb, ahgross
This commit is contained in:
parent
7ecc657cee
commit
25e301ca19
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2000, 2009, 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 \
|
||||
|
@ -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
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, 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 CDRInputStreamBase
|
||||
|
||||
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 CDRInputStreamBase
|
||||
|
||||
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) {
|
||||
@ -588,54 +585,6 @@ public class CDRInputStream_1_0 extends CDRInputStreamBase
|
||||
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() {
|
||||
return readStringOrIndirection(false);
|
||||
}
|
||||
@ -1045,7 +994,7 @@ public class CDRInputStream_1_0 extends CDRInputStreamBase
|
||||
|
||||
try {
|
||||
if (valueHandler == null)
|
||||
valueHandler = ORBUtility.createValueHandler(orb);
|
||||
valueHandler = ORBUtility.createValueHandler();
|
||||
|
||||
value = valueHandler.readValue(parent,
|
||||
indirection,
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, 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 CDROutputStreamBase
|
||||
|
||||
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 CDROutputStreamBase
|
||||
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 CDROutputStreamBase
|
||||
|
||||
private void writeRMIIIOPValueType(Serializable object, Class clazz) {
|
||||
if (valueHandler == null)
|
||||
valueHandler = ORBUtility.createValueHandler(orb); //d11638
|
||||
valueHandler = ORBUtility.createValueHandler(); //d11638
|
||||
|
||||
Serializable key = object;
|
||||
|
||||
|
@ -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 _CodeBaseImplBase
|
||||
// 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 _CodeBaseImplBase
|
||||
// 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 _CodeBaseImplBase
|
||||
// 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();
|
||||
|
@ -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.spi.logging.CORBALogDomains;
|
||||
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,14 +150,22 @@ public class ValueHandlerImpl implements javax.rmi.CORBA.ValueHandlerMultiFormat
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes the value to the stream using java semantics.
|
||||
* @param out The stream to write the value to
|
||||
@ -458,12 +466,7 @@ public class ValueHandlerImpl implements javax.rmi.CORBA.ValueHandlerMultiFormat
|
||||
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 javax.rmi.CORBA.ValueHandlerMultiFormat
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 javax.rmi.CORBA.ValueHandlerMultiFormat
|
||||
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 javax.rmi.CORBA.ValueHandlerMultiFormat
|
||||
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 javax.rmi.CORBA.ValueHandlerMultiFormat
|
||||
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 javax.rmi.CORBA.ValueHandlerMultiFormat
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
@ -93,6 +93,14 @@ public class ValueUtility {
|
||||
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 {
|
||||
|
||||
|
@ -112,6 +112,9 @@ import com.sun.corba.se.impl.util.JDKBridge;
|
||||
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.CORBA.UtilDelegate
|
||||
// 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);
|
||||
|
@ -840,7 +840,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
|
||||
// backward compatability 4365188
|
||||
CodeBase cb;
|
||||
|
||||
ValueHandler vh = ORBUtility.createValueHandler(this);
|
||||
ValueHandler vh = ORBUtility.createValueHandler();
|
||||
|
||||
cb = (CodeBase)vh.getRunTimeCodeBase();
|
||||
return ORBUtility.connectAndGetIOR( this, cb ) ;
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2009, 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,44 +160,12 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if it was accurately determined that the remote ORB is
|
||||
* a foreign (non-JavaSoft) ORB. Note: If passed the ORBSingleton, this
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -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();
|
||||
|
||||
@ -47,29 +41,6 @@ public abstract class RepositoryIdFactory
|
||||
return currentDelegator;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@ -78,26 +49,4 @@ public abstract class RepositoryIdFactory
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -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 +")");
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
}
|
||||
}
|
@ -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";
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* 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
|
||||
@ -23,32 +23,10 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
*/
|
||||
package com.sun.corba.se.impl.orbutil;
|
||||
package sun.corba;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Hashtable;
|
||||
import com.sun.corba.se.impl.io.ValueHandlerImpl;
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
public interface JavaCorbaAccess {
|
||||
public ValueHandlerImpl newValueHandlerImpl();
|
||||
}
|
60
corba/src/share/classes/sun/corba/SharedSecrets.java
Normal file
60
corba/src/share/classes/sun/corba/SharedSecrets.java
Normal file
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user