src/share/classes/com/sun/corba/se/impl/util/JDKBridge.java

Thu, 31 Aug 2017 18:10:36 +0800

author
aoqi
date
Thu, 31 Aug 2017 18:10:36 +0800
changeset 748
6845b95cba6b
parent 158
91006f157c46
parent 0
7ef37b2cdcad
permissions
-rw-r--r--

merge

     1 /*
     2  * Copyright (c) 1995, 2004, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    25 /*
    26  * Licensed Materials - Property of IBM
    27  * RMI-IIOP v1.0
    28  * Copyright IBM Corp. 1998 1999  All Rights Reserved
    29  *
    30  */
    32 package com.sun.corba.se.impl.util;
    34 import java.rmi.Remote;
    35 import java.rmi.NoSuchObjectException;
    36 import java.rmi.server.RMIClassLoader;
    37 import java.rmi.server.UnicastRemoteObject;
    38 import org.omg.CORBA.BAD_PARAM;
    39 import org.omg.CORBA.CompletionStatus;
    40 import java.util.Properties;
    41 import java.io.File;
    42 import java.io.FileInputStream;
    43 import java.security.AccessController;
    44 import java.security.PrivilegedAction;
    45 import java.net.MalformedURLException;
    46 import com.sun.corba.se.impl.orbutil.GetPropertyAction;
    48 /**
    49  *  Utility methods for doing various method calls which are used
    50  *  by multiple classes
    51  */
    52 public class JDKBridge {
    54     /**
    55      * Get local codebase System property (java.rmi.server.codebase).
    56      * May be null or a space separated array of URLS.
    57      */
    58     public static String getLocalCodebase () {
    59         return localCodebase;
    60     }
    62     /**
    63      * Return true if the system property "java.rmi.server.useCodebaseOnly"
    64      * is set, false otherwise.
    65      */
    66     public static boolean useCodebaseOnly () {
    67         return useCodebaseOnly;
    68     }
    70     /**
    71      * Returns a class instance for the specified class.
    72      * @param className the name of the class
    73      * @param remoteCodebase a space-separated array of urls at which
    74      * the class might be found. May be null.
    75      * @param loader a ClassLoader who may be used to
    76      * load the class if all other methods fail.
    77      * @return the <code>Class</code> object representing the loaded class.
    78      * @exception throws ClassNotFoundException if class cannot be loaded.
    79      */
    80     public static Class loadClass (String className,
    81                                    String remoteCodebase,
    82                                    ClassLoader loader)
    83         throws ClassNotFoundException {
    85         if (loader == null) {
    86             return loadClassM(className,remoteCodebase,useCodebaseOnly);
    87         } else {
    88             try {
    89                 return loadClassM(className,remoteCodebase,useCodebaseOnly);
    90             } catch (ClassNotFoundException e) {
    91                 return loader.loadClass(className);
    92             }
    93         }
    94     }
    96     /**
    97      * Returns a class instance for the specified class.
    98      * @param className the name of the class
    99      * @param remoteCodebase a space-separated array of urls at which
   100      * the class might be found. May be null.
   101      * @return the <code>Class</code> object representing the loaded class.
   102      * @exception throws ClassNotFoundException if class cannot be loaded.
   103      */
   104     public static Class loadClass (String className,
   105                                    String remoteCodebase)
   106         throws ClassNotFoundException {
   107         return loadClass(className,remoteCodebase,null);
   108     }
   110     /**
   111      * Returns a class instance for the specified class.
   112      * @param className the name of the class
   113      * @return the <code>Class</code> object representing the loaded class.
   114      * @exception throws ClassNotFoundException if class cannot be loaded.
   115      */
   116     public static Class loadClass (String className)
   117         throws ClassNotFoundException {
   118         return loadClass(className,null,null);
   119     }
   121     private static final String LOCAL_CODEBASE_KEY = "java.rmi.server.codebase";
   122     private static final String USE_CODEBASE_ONLY_KEY = "java.rmi.server.useCodebaseOnly";
   123     private static String localCodebase = null;
   124     private static boolean useCodebaseOnly;
   126     static {
   127         setCodebaseProperties();
   128     }
   130     public static final void main (String[] args) {
   131         System.out.println("1.2 VM");
   133         /*
   134                  // If on 1.2, use a policy with all permissions.
   135                  System.setSecurityManager (new javax.rmi.download.SecurityManager());
   136                  String targetClass = "[[Lrmic.Typedef;";
   137                  System.out.println("localCodebase =  "+localCodebase);
   138                  System.out.println("Trying to load "+targetClass);
   139                  try {
   140                  Class clz = loadClass(targetClass,null,localCodebase);
   141                  System.out.println("Loaded: "+clz);
   142                  } catch (ClassNotFoundException e) {
   143                  System.out.println("Caught "+e);
   144                  }
   145         */
   146     }
   148     /**
   149      * Set the codebase and useCodebaseOnly properties. This is public
   150      * only for test code.
   151      */
   152     public static synchronized void setCodebaseProperties () {
   153         String prop = (String)AccessController.doPrivileged(
   154             new GetPropertyAction(LOCAL_CODEBASE_KEY)
   155         );
   156         if (prop != null && prop.trim().length() > 0) {
   157             localCodebase = prop;
   158         }
   160         prop = (String)AccessController.doPrivileged(
   161             new GetPropertyAction(USE_CODEBASE_ONLY_KEY)
   162         );
   163         if (prop != null && prop.trim().length() > 0) {
   164             useCodebaseOnly = Boolean.valueOf(prop).booleanValue();
   165         }
   166     }
   168     /**
   169      * Set the default code base. This method is here only
   170      * for test code.
   171      */
   172     public static synchronized void setLocalCodebase(String codebase) {
   173         localCodebase = codebase;
   174     }
   176     private static Class loadClassM (String className,
   177                             String remoteCodebase,
   178                             boolean useCodebaseOnly)
   179         throws ClassNotFoundException {
   181         try {
   182             return JDKClassLoader.loadClass(null,className);
   183         } catch (ClassNotFoundException e) {}
   184         try {
   185             if (!useCodebaseOnly && remoteCodebase != null) {
   186                 return RMIClassLoader.loadClass(remoteCodebase,
   187                                                 className);
   188             } else {
   189                 return RMIClassLoader.loadClass(className);
   190             }
   191         } catch (MalformedURLException e) {
   192             className = className + ": " + e.toString();
   193         }
   195         throw new ClassNotFoundException(className);
   196     }
   197 }

mercurial