diff --git a/src/share/classes/com/sun/corba/se/impl/ior/StubIORImpl.java b/src/share/classes/com/sun/corba/se/impl/ior/StubIORImpl.java index c4238b7d1ec7522cdcde6df3b5792a83bd38e386..4252ac82a844d4aed28464d8ccc4f996d0f83c98 100644 --- a/src/share/classes/com/sun/corba/se/impl/ior/StubIORImpl.java +++ b/src/share/classes/com/sun/corba/se/impl/ior/StubIORImpl.java @@ -31,9 +31,9 @@ package com.sun.corba.se.impl.ior; -import java.io.ObjectInputStream ; -import java.io.ObjectOutputStream ; -import java.io.IOException ; +import java.io.IOException; +import java.io.ObjectOutputStream; +import sun.corba.SharedSecrets; import org.omg.CORBA.ORB ; @@ -46,7 +46,6 @@ import org.omg.CORBA.portable.OutputStream ; // other vendor's ORBs. import com.sun.corba.se.spi.presentation.rmi.StubAdapter ; import com.sun.corba.se.impl.orbutil.HexOutputStream ; -import sun.corba.SharedSecrets; /** * This class implements a very simply IOR representation diff --git a/src/share/classes/sun/corba/SharedSecrets.java b/src/share/classes/sun/corba/SharedSecrets.java index 72f20eb724e23b04b423671876e9d2eedecccefc..1ee783a546103a40a37519578bb240d04e1e6ca4 100644 --- a/src/share/classes/sun/corba/SharedSecrets.java +++ b/src/share/classes/sun/corba/SharedSecrets.java @@ -29,8 +29,7 @@ import com.sun.corba.se.impl.io.ValueUtility; import sun.misc.JavaOISAccess; import sun.misc.Unsafe; -import java.io.ObjectInputStream; -import java.security.AccessController; +import java.lang.reflect.Method; /** A repository of "shared secrets", which are a mechanism for calling implementation-private methods in another package without @@ -45,8 +44,32 @@ import java.security.AccessController; public class SharedSecrets { private static final Unsafe unsafe = Unsafe.getUnsafe(); private static JavaCorbaAccess javaCorbaAccess; + private static final Method getJavaOISAccessMethod; private static JavaOISAccess javaOISAccess; + // Initialize getJavaOISAccessMethod using reflection. + static { + try { + Class sharedSecret = Class.forName("sun.misc.SharedSecrets"); + getJavaOISAccessMethod = + sharedSecret.getMethod("getJavaOISAccess"); + } catch (Exception e) { + throw new ExceptionInInitializerError(e); + } + } + + public static JavaOISAccess getJavaOISAccess() { + if (javaOISAccess == null) { + try { + javaOISAccess = + (JavaOISAccess) getJavaOISAccessMethod.invoke(null); + } catch (Exception e) { + throw new ExceptionInInitializerError(e); + } + } + return javaOISAccess; + } + public static JavaCorbaAccess getJavaCorbaAccess() { if (javaCorbaAccess == null) { // Ensure ValueUtility is initialized; we know that that class @@ -59,16 +82,4 @@ public class SharedSecrets { public static void setJavaCorbaAccess(JavaCorbaAccess access) { javaCorbaAccess = access; } - - public static void setJavaOISAccess(JavaOISAccess access) { - javaOISAccess = access; - } - - public static JavaOISAccess getJavaOISAccess() { - if (javaOISAccess == null) - unsafe.ensureClassInitialized(ObjectInputStream.class); - - return javaOISAccess; - } - }