OSDN Git Service

2004-10-18 Jeroen Frijters <jeroen@frijters.net>
[pf3gnuchains/gcc-fork.git] / libjava / javax / naming / spi / NamingManager.java
index bb3d872..6c75e72 100644 (file)
@@ -1,5 +1,5 @@
 /* NamingManager.java --
-   Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -38,17 +38,27 @@ exception statement from your version. */
 
 package javax.naming.spi;
 
-import java.util.*;
-import javax.naming.*;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+import javax.naming.CannotProceedException;
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.NamingException;
+import javax.naming.NoInitialContextException;
+import javax.naming.RefAddr;
+import javax.naming.Reference;
+import javax.naming.Referenceable;
+import javax.naming.StringRefAddr;
 
 public class NamingManager
 {
   public static final String CPE = "java.naming.spi.CannotProceedException";
 
-  private static InitialContextFactoryBuilder icfb = null;
+  private static InitialContextFactoryBuilder icfb;
 
   // Package private so DirectoryManager can access it.
-  static ObjectFactoryBuilder ofb = null;
+  static ObjectFactoryBuilder ofb;
 
   // This class cannot be instantiated.
   NamingManager ()
@@ -83,13 +93,17 @@ public class NamingManager
 
        try
          {
-           icf = (InitialContextFactory) Class.forName (java_naming_factory_initial).newInstance ();
+           icf = (InitialContextFactory)Class.forName
+               (java_naming_factory_initial, true,
+                Thread.currentThread().getContextClassLoader())
+               .newInstance ();
          }
        catch (Exception exception)
          {
            NoInitialContextException e
-             = new NoInitialContextException ("Can't load InitialContextFactory class: "
-                                              + java_naming_factory_initial);
+             = new NoInitialContextException
+             ("Can't load InitialContextFactory class: "
+              + java_naming_factory_initial);
            e.setRootCause(exception);
            throw e;
          }
@@ -117,7 +131,7 @@ public class NamingManager
        prefixes = "com.sun.jndi.url";
       }
 
-    scheme += "URLContextFactory";
+    scheme = scheme + "." + scheme + "URLContextFactory";
 
     StringTokenizer tokens = new StringTokenizer (prefixes, ":");
     while (tokens.hasMoreTokens ())
@@ -125,7 +139,9 @@ public class NamingManager
        String aTry = tokens.nextToken ();
        try
          {
-           Class factoryClass = Class.forName (aTry + "." + scheme);
+           Class factoryClass = Class.forName (aTry + "." + scheme,
+                                               true,
+                                               Thread.currentThread().getContextClassLoader());
            ObjectFactory factory =
              (ObjectFactory) factoryClass.newInstance ();
            Object obj = factory.getObjectInstance (refInfo, name,
@@ -227,7 +243,9 @@ public class NamingManager
            if (fClass != null)
              {
                // Exceptions here are passed to the caller.
-               Class k = Class.forName (fClass);
+               Class k = Class.forName (fClass,
+                                        true,
+                                        Thread.currentThread().getContextClassLoader());
                factory = (ObjectFactory) k.newInstance ();
              }
            else
@@ -271,7 +289,9 @@ public class NamingManager
            while (tokens.hasMoreTokens ())
              {
                String klassName = tokens.nextToken ();
-               Class k = Class.forName (klassName);
+               Class k = Class.forName (klassName,
+                                        true,
+                                        Thread.currentThread().getContextClassLoader());
                factory = (ObjectFactory) k.newInstance ();
                Object obj = factory.getObjectInstance (refInfo, name,
                                                        nameCtx, environment);
@@ -314,8 +334,10 @@ public class NamingManager
     // It is really unclear to me if this is right.
     try
       {
-       Object obj = getObjectInstance (null, cpe.getAltName (),
-                                       cpe.getAltNameCtx (), env);
+       Object obj = getObjectInstance (cpe.getResolvedObj(),
+                                       cpe.getAltName (),
+                                       cpe.getAltNameCtx (), 
+                                       env);
        if (obj != null)
          return (Context) obj;
       }
@@ -323,6 +345,9 @@ public class NamingManager
       {
       }
 
+    // fix stack trace for re-thrown exception (message confusing otherwise)
+    cpe.fillInStackTrace();
+
     throw cpe;
   }
 
@@ -337,7 +362,9 @@ public class NamingManager
        String klassName = tokens.nextToken ();
        try
          {
-           Class k = Class.forName (klassName);
+           Class k = Class.forName (klassName,
+                                    true,
+                                    Thread.currentThread().getContextClassLoader());
            StateFactory factory = (StateFactory) k.newInstance ();
            Object o = factory.getStateToBind (obj, name, nameCtx,
                                               environment);