src/share/classes/org/omg/CORBA/ORB.java

changeset 615
8b0b643ffd42
parent 545
fe781b3badd6
child 660
009fc3f785a9
     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  

mercurial