1.1 --- a/src/share/classes/org/omg/CORBA/ORB.java Tue Jan 14 15:27:49 2014 -0800 1.2 +++ b/src/share/classes/org/omg/CORBA/ORB.java Tue Jan 21 16:26:59 2014 +0000 1.3 @@ -1,5 +1,5 @@ 1.4 /* 1.5 - * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. 1.6 + * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved. 1.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.8 * 1.9 * This code is free software; you can redistribute it and/or modify it 1.10 @@ -36,6 +36,8 @@ 1.11 import java.security.AccessController; 1.12 import java.security.PrivilegedAction; 1.13 1.14 +import sun.reflect.misc.ReflectUtil; 1.15 + 1.16 /** 1.17 * A class providing APIs for the CORBA Object Request Broker 1.18 * features. The <code>ORB</code> class also provides 1.19 @@ -289,20 +291,38 @@ 1.20 (className.equals("com.sun.corba.se.impl.orb.ORBSingleton"))) { 1.21 singleton = new com.sun.corba.se.impl.orb.ORBSingleton(); 1.22 } else { 1.23 - singleton = create_impl(className); 1.24 + singleton = create_impl_with_systemclassloader(className); 1.25 } 1.26 } 1.27 return singleton; 1.28 } 1.29 1.30 + private static ORB create_impl_with_systemclassloader(String className) { 1.31 + 1.32 + try { 1.33 + ReflectUtil.checkPackageAccess(className); 1.34 + ClassLoader cl = ClassLoader.getSystemClassLoader(); 1.35 + Class<org.omg.CORBA.ORB> orbBaseClass = org.omg.CORBA.ORB.class; 1.36 + Class<?> singletonOrbClass = Class.forName(className, true, cl).asSubclass(orbBaseClass); 1.37 + return (ORB)singletonOrbClass.newInstance(); 1.38 + } catch (Throwable ex) { 1.39 + SystemException systemException = new INITIALIZE( 1.40 + "can't instantiate default ORB implementation " + className); 1.41 + systemException.initCause(ex); 1.42 + throw systemException; 1.43 + } 1.44 + } 1.45 + 1.46 private static ORB create_impl(String className) { 1.47 - 1.48 ClassLoader cl = Thread.currentThread().getContextClassLoader(); 1.49 if (cl == null) 1.50 cl = ClassLoader.getSystemClassLoader(); 1.51 1.52 try { 1.53 - return (ORB) Class.forName(className, true, cl).newInstance(); 1.54 + ReflectUtil.checkPackageAccess(className); 1.55 + Class<org.omg.CORBA.ORB> orbBaseClass = org.omg.CORBA.ORB.class; 1.56 + Class<?> orbClass = Class.forName(className, true, cl).asSubclass(orbBaseClass); 1.57 + return (ORB)orbClass.newInstance(); 1.58 } catch (Throwable ex) { 1.59 SystemException systemException = new INITIALIZE( 1.60 "can't instantiate default ORB implementation " + className); 1.61 @@ -346,7 +366,6 @@ 1.62 } else { 1.63 orb = create_impl(className); 1.64 } 1.65 - 1.66 orb.set_parameters(args, props); 1.67 return orb; 1.68 } 1.69 @@ -377,7 +396,6 @@ 1.70 } else { 1.71 orb = create_impl(className); 1.72 } 1.73 - 1.74 orb.set_parameters(app, props); 1.75 return orb; 1.76 } 1.77 @@ -573,7 +591,7 @@ 1.78 try { 1.79 // First try to load the OperationDef class 1.80 String opDefClassName = "org.omg.CORBA.OperationDef"; 1.81 - Class opDefClass = null; 1.82 + Class<?> opDefClass = null; 1.83 1.84 ClassLoader cl = Thread.currentThread().getContextClassLoader(); 1.85 if ( cl == null ) 1.86 @@ -583,7 +601,7 @@ 1.87 1.88 // OK, we loaded OperationDef. Now try to get the 1.89 // create_operation_list(OperationDef oper) method. 1.90 - Class[] argc = { opDefClass }; 1.91 + Class<?>[] argc = { opDefClass }; 1.92 java.lang.reflect.Method meth = 1.93 this.getClass().getMethod("create_operation_list", argc); 1.94