8164907: Eliminate dependency on java.naming/com.sun.jndi.toolkit.url
authorprappo
Mon, 19 Dec 2016 16:00:59 +0000
changeset 42765 2bdc3e9c3a81
parent 42698 c60c25d606dd
child 42766 1bd6808c38fd
8164907: Eliminate dependency on java.naming/com.sun.jndi.toolkit.url Reviewed-by: chegar, rriggs
jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNBindingEnumeration.java
jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNCtx.java
jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNCtxFactory.java
jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNNameParser.java
jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java
jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/ExceptionMapper.java
jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/IiopUrl.java
jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/OrbReuseTracker.java
jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/RemoteToCorba.java
jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/jndiprovider.properties
jdk/src/java.corba/share/classes/com/sun/jndi/toolkit/corba/CorbaUtils.java
jdk/src/java.corba/share/classes/com/sun/jndi/url/corbaname/corbanameURLContextFactory.java
jdk/src/java.corba/share/classes/com/sun/jndi/url/iiop/iiopURLContext.java
jdk/src/java.corba/share/classes/com/sun/jndi/url/iiop/iiopURLContextFactory.java
jdk/src/java.corba/share/classes/com/sun/jndi/url/iiopname/iiopnameURLContextFactory.java
jdk/src/java.naming/share/classes/module-info.java
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNBindingEnumeration.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,235 +0,0 @@
-/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.*;
-import javax.naming.spi.NamingManager;
-
-import java.util.NoSuchElementException;
-import java.util.Hashtable;
-
-import org.omg.CosNaming.*;
-
-/**
-  * Implements the JNDI NamingEnumeration interface for COS
-  * Naming. Gets hold of a list of bindings from the COS Naming Server
-  * and allows the client to iterate through them.
-  *
-  * @author Raj Krishnamurthy
-  * @author Rosanna Lee
-  */
-
-final class CNBindingEnumeration
-        implements NamingEnumeration<javax.naming.Binding> {
-
-    private static final int DEFAULT_BATCHSIZE = 100;
-    private BindingListHolder _bindingList; // list of bindings
-    private BindingIterator _bindingIter;   // iterator for getting list of bindings
-    private int counter;                    // pointer in _bindingList
-    private int batchsize = DEFAULT_BATCHSIZE;  // how many to ask for each time
-    private CNCtx _ctx;                     // ctx to list
-    private Hashtable<?,?> _env;            // environment for getObjectInstance
-    private boolean more = false;           // iterator done?
-    private boolean isLookedUpCtx = false;  // iterating on a context beneath this context ?
-
-    /**
-     * Creates a CNBindingEnumeration object.
-     * @param ctx Context to enumerate
-     */
-    CNBindingEnumeration(CNCtx ctx, boolean isLookedUpCtx, Hashtable<?,?> env) {
-        // Get batch size to use
-        String batch = (env != null ?
-            (String)env.get(javax.naming.Context.BATCHSIZE) : null);
-        if (batch != null) {
-            try {
-                batchsize = Integer.parseInt(batch);
-            } catch (NumberFormatException e) {
-                throw new IllegalArgumentException("Batch size not numeric: " + batch);
-            }
-        }
-        _ctx = ctx;
-        _ctx.incEnumCount();
-        this.isLookedUpCtx = isLookedUpCtx;
-        _env = env;
-        _bindingList = new BindingListHolder();
-        BindingIteratorHolder _bindingIterH = new BindingIteratorHolder();
-
-        // Perform listing and request that bindings be returned in _bindingIter
-        // Upon return,_bindingList returns a zero length list
-        _ctx._nc.list(0, _bindingList, _bindingIterH);
-
-        _bindingIter = _bindingIterH.value;
-
-        // Get first batch using _bindingIter
-        if (_bindingIter != null) {
-            more = _bindingIter.next_n(batchsize, _bindingList);
-        } else {
-            more = false;
-        }
-        counter = 0;
-    }
-
-    /**
-     * Returns the next binding in the list.
-     * @exception NamingException any naming exception.
-     */
-
-    public javax.naming.Binding next() throws NamingException {
-        if (more && counter >= _bindingList.value.length) {
-            getMore();
-        }
-        if (more && counter < _bindingList.value.length) {
-            org.omg.CosNaming.Binding bndg = _bindingList.value[counter];
-            counter++;
-            return mapBinding(bndg);
-        } else {
-            throw new NoSuchElementException();
-        }
-    }
-
-
-    /**
-    * Returns true or false depending on whether there are more bindings.
-    * @return boolean value
-    */
-
-    public boolean hasMore() throws NamingException {
-        // If there's more, check whether current bindingList has been exhausted,
-        // and if so, try to get more.
-        // If no more, just say so.
-        return more ? (counter < _bindingList.value.length || getMore()) : false;
-    }
-
-    /**
-     * Returns true or false depending on whether there are more bindings.
-     * Need to define this to satisfy the Enumeration api requirement.
-     * @return boolean value
-     */
-
-    public boolean hasMoreElements() {
-        try {
-            return hasMore();
-        } catch (NamingException e) {
-            return false;
-        }
-    }
-
-    /**
-    * Returns the next binding in the list.
-    * @exception NoSuchElementException Thrown when the end of the
-    * list is reached.
-    */
-
-    public javax.naming.Binding nextElement() {
-        try {
-            return next();
-        } catch (NamingException ne) {
-            throw new NoSuchElementException();
-        }
-    }
-
-    public void close() throws NamingException {
-        more = false;
-        if (_bindingIter != null) {
-            _bindingIter.destroy();
-            _bindingIter = null;
-        }
-        if (_ctx != null) {
-            _ctx.decEnumCount();
-
-            /**
-             * context was obtained by CNCtx, the user doesn't have a handle to
-             * it, close it as we are done enumerating through the context
-             */
-            if (isLookedUpCtx) {
-                _ctx.close();
-            }
-            _ctx = null;
-        }
-    }
-
-    protected void finalize() {
-        try {
-            close();
-        } catch (NamingException e) {
-            // ignore failures
-        }
-    }
-
-    /**
-     * Get the next batch using _bindingIter. Update the 'more' field.
-     */
-    private boolean getMore() throws NamingException {
-        try {
-            more = _bindingIter.next_n(batchsize, _bindingList);
-            counter = 0; // reset
-        } catch (Exception e) {
-            more = false;
-            NamingException ne = new NamingException(
-                "Problem getting binding list");
-            ne.setRootCause(e);
-            throw ne;
-        }
-        return more;
-    }
-
-    /**
-    * Constructs a JNDI Binding object from the COS Naming binding
-    * object.
-    * @exception NameNotFound No objects under the name.
-    * @exception CannotProceed Unable to obtain a continuation context
-    * @exception InvalidName Name not understood.
-    * @exception NamingException One of the above.
-    */
-
-    private javax.naming.Binding mapBinding(org.omg.CosNaming.Binding bndg)
-                throws NamingException {
-        java.lang.Object obj = _ctx.callResolve(bndg.binding_name);
-
-        Name cname = CNNameParser.cosNameToName(bndg.binding_name);
-
-        try {
-            obj = NamingManager.getObjectInstance(obj, cname, _ctx, _env);
-        } catch (NamingException e) {
-            throw e;
-        } catch (Exception e) {
-            NamingException ne = new NamingException(
-                        "problem generating object using object factory");
-            ne.setRootCause(e);
-            throw ne;
-        }
-
-        // Use cname.toString() instead of bindingName because the name
-        // in the binding should be a composite name
-        String cnameStr = cname.toString();
-        javax.naming.Binding jbndg = new javax.naming.Binding(cnameStr, obj);
-
-        NameComponent[] comps = _ctx.makeFullName(bndg.binding_name);
-        String fullName = CNNameParser.cosNameToInsString(comps);
-        jbndg.setNameInNamespace(fullName);
-        return jbndg;
-    }
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNCtx.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1158 +0,0 @@
-/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.*;
-import javax.naming.spi.NamingManager;
-import javax.naming.spi.ResolveResult;
-
-import java.util.Hashtable;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.BufferedReader;
-import java.io.IOException;
-
-import org.omg.CosNaming.*;
-import org.omg.CosNaming.NamingContextPackage.*;
-import org.omg.CORBA.*;
-
-import com.sun.jndi.toolkit.corba.CorbaUtils;
-
-// Needed for creating default ORB
-import java.applet.Applet;
-
-/**
-  * Provides a bridge to the CosNaming server provided by
-  * JavaIDL. This class provides the InitialContext from CosNaming.
-  *
-  * @author Raj Krishnamurthy
-  * @author Rosanna Lee
-  */
-
-public class CNCtx implements javax.naming.Context {
-
-    private final static boolean debug = false;
-
-    /*
-     * Implement one shared ORB among all CNCtx.  However, there is a public constructor
-     * accepting an ORB, so we need the option of using a given ORB.
-     */
-    private static ORB _defaultOrb;
-    ORB _orb;                   // used by ExceptionMapper and RMI/IIOP factory
-    public NamingContext _nc;   // public for accessing underlying NamingContext
-
-    private synchronized static ORB getDefaultOrb() {
-        if (_defaultOrb == null) {
-            _defaultOrb = CorbaUtils.getOrb(null, -1,
-               new Hashtable<String, java.lang.Object>());
-        }
-        return _defaultOrb;
-    }
-
-    private NameComponent[] _name = null;
-
-    Hashtable<String, java.lang.Object> _env; // used by ExceptionMapper
-    static final CNNameParser parser = new CNNameParser();
-
-    private static final String FED_PROP = "com.sun.jndi.cosnaming.federation";
-    boolean federation = false;
-
-    // Reference counter for tracking _orb references
-    OrbReuseTracker orbTracker = null;
-    int enumCount;
-    boolean isCloseCalled = false;
-
-    /**
-      * Create a CNCtx object. Gets the initial naming
-      * reference for the COS Naming Service from the ORB.
-      * The ORB can be passed in via the java.naming.corba.orb property
-      * or be created using properties in the environment properties.
-      * @param env Environment properties for initializing name service.
-      * @exception NamingException Cannot initialize ORB or naming context.
-      */
-    @SuppressWarnings("unchecked")
-    CNCtx(Hashtable<?,?> env) throws NamingException {
-        if (env != null) {
-            env = (Hashtable<?,?>)env.clone();
-        }
-        _env = (Hashtable<String, java.lang.Object>)env;
-        federation = "true".equals(env != null ? env.get(FED_PROP) : null);
-        initOrbAndRootContext(env);
-    }
-
-    private CNCtx() {
-    }
-
-    /**
-     * This method is used by the iiop and iiopname URL Context factories.
-     */
-    @SuppressWarnings("unchecked")
-    public static ResolveResult createUsingURL(String url, Hashtable<?,?> env)
-    throws NamingException {
-        CNCtx ctx = new CNCtx();
-        if (env != null) {
-            env = (Hashtable<?,?>) env.clone();
-        }
-        ctx._env = (Hashtable<String, java.lang.Object>)env;
-        String rest = ctx.initUsingUrl(
-            env != null ?
-                (org.omg.CORBA.ORB) env.get("java.naming.corba.orb")
-                : null,
-            url, env);
-
-        // rest is the INS name
-        // Return the parsed form to prevent subsequent lookup
-        // from parsing the string as a composite name
-        // The caller should be aware that a toString() of the name,
-        // which came from the environment will yield its INS syntax,
-        // rather than a composite syntax
-        return new ResolveResult(ctx, parser.parse(rest));
-    }
-
-    /**
-      * Creates a CNCtx object which supports the javax.naming
-      * apis given a COS Naming Context object.
-      * @param orb The ORB used by this context
-      * @param tracker The ORB reuse tracker for tracking references to the
-      *  orb object
-      * @param nctx The COS NamingContext object associated with this context
-      * @param name The name of this context relative to the root
-      */
-
-    CNCtx(ORB orb, OrbReuseTracker tracker, NamingContext nctx,
-          Hashtable<String, java.lang.Object> env, NameComponent[]name)
-        throws NamingException {
-            if (orb == null || nctx == null)
-                throw new ConfigurationException(
-                    "Must supply ORB or NamingContext");
-            if (orb != null) {
-                _orb = orb;
-            } else {
-                _orb = getDefaultOrb();
-            }
-            _nc = nctx;
-            _env = env;
-            _name = name;
-            federation = "true".equals(env != null ? env.get(FED_PROP) : null);
-    }
-
-    NameComponent[] makeFullName(NameComponent[] child) {
-        if (_name == null || _name.length == 0) {
-            return child;
-        }
-        NameComponent[] answer = new NameComponent[_name.length+child.length];
-
-        // parent
-        System.arraycopy(_name, 0, answer, 0, _name.length);
-
-        // child
-        System.arraycopy(child, 0, answer, _name.length, child.length);
-        return answer;
-    }
-
-
-    public String getNameInNamespace() throws NamingException {
-        if (_name == null || _name.length == 0) {
-            return "";
-        }
-        return CNNameParser.cosNameToInsString(_name);
-    }
-
-    /**
-     * These are the URL schemes that need to be processed.
-     * IOR and corbaloc URLs can be passed directly to ORB.string_to_object()
-     */
-    private static boolean isCorbaUrl(String url) {
-        return url.startsWith("iiop://")
-            || url.startsWith("iiopname://")
-            || url.startsWith("corbaname:")
-            ;
-    }
-
-    /**
-      * Initializes the COS Naming Service.
-      * This method initializes the three instance fields:
-      * _nc : The root naming context.
-      * _orb: The ORB to use for connecting RMI/IIOP stubs and for
-      *       getting the naming context (_nc) if one was not specified
-      *       explicitly via PROVIDER_URL.
-      * _name: The name of the root naming context.
-      *<p>
-      * _orb is obtained from java.naming.corba.orb if it has been set.
-      * Otherwise, _orb is created using the host/port from PROVIDER_URL
-      * (if it contains an "iiop" or "iiopname" URL), or from initialization
-      * properties specified in env.
-      *<p>
-      * _nc is obtained from the IOR stored in PROVIDER_URL if it has been
-      * set and does not contain an "iiop" or "iiopname" URL. It can be
-      * a stringified IOR, "corbaloc" URL, "corbaname" URL,
-      * or a URL (such as file/http/ftp) to a location
-      * containing a stringified IOR. If PROVIDER_URL has not been
-      * set in this way, it is obtained from the result of
-      *     ORB.resolve_initial_reference("NameService");
-      *<p>
-      * _name is obtained from the "iiop", "iiopname", or "corbaname" URL.
-      * It is the empty name by default.
-      *
-      * @param env Environment The possibly null environment.
-      * @exception NamingException When an error occurs while initializing the
-      * ORB or the naming context.
-      */
-    private void initOrbAndRootContext(Hashtable<?,?> env) throws NamingException {
-        org.omg.CORBA.ORB inOrb = null;
-        String ncIor = null;
-
-        if (inOrb == null && env != null) {
-            inOrb = (org.omg.CORBA.ORB) env.get("java.naming.corba.orb");
-        }
-
-        if (inOrb == null)
-            inOrb = getDefaultOrb(); // will create a default ORB if none exists
-
-        // Extract PROVIDER_URL from environment
-        String provUrl = null;
-        if (env != null) {
-            provUrl = (String)env.get(javax.naming.Context.PROVIDER_URL);
-        }
-
-        if (provUrl != null && !isCorbaUrl(provUrl)) {
-            // Initialize the root naming context by using the IOR supplied
-            // in the PROVIDER_URL
-            ncIor = getStringifiedIor(provUrl);
-            setOrbAndRootContext(inOrb, ncIor);
-        } else if (provUrl != null) {
-            // Initialize the root naming context by using the URL supplied
-            // in the PROVIDER_URL
-            String insName = initUsingUrl(inOrb, provUrl, env);
-
-            // If name supplied in URL, resolve it to a NamingContext
-            if (insName.length() > 0) {
-                _name = CNNameParser.nameToCosName(parser.parse(insName));
-                try {
-                    org.omg.CORBA.Object obj = _nc.resolve(_name);
-                    _nc = NamingContextHelper.narrow(obj);
-                    if (_nc == null) {
-                        throw new ConfigurationException(insName +
-                            " does not name a NamingContext");
-                    }
-                } catch (org.omg.CORBA.BAD_PARAM e) {
-                    throw new ConfigurationException(insName +
-                        " does not name a NamingContext");
-                } catch (Exception e) {
-                    throw ExceptionMapper.mapException(e, this, _name);
-                }
-            }
-        } else {
-            // No PROVIDER_URL supplied; initialize using defaults
-            if (debug) {
-                System.err.println("Getting default ORB: " + inOrb + env);
-            }
-            setOrbAndRootContext(inOrb, (String)null);
-        }
-    }
-
-
-    private String initUsingUrl(ORB orb, String url, Hashtable<?,?> env)
-        throws NamingException {
-        if (url.startsWith("iiop://") || url.startsWith("iiopname://")) {
-            return initUsingIiopUrl(orb, url, env);
-        } else {
-            return initUsingCorbanameUrl(orb, url, env);
-        }
-    }
-
-    /**
-     * Handles "iiop" and "iiopname" URLs (INS 98-10-11)
-     */
-    private String initUsingIiopUrl(ORB defOrb, String url, Hashtable<?,?> env)
-        throws NamingException {
-
-        if (defOrb == null)
-            defOrb = getDefaultOrb();
-
-        try {
-            IiopUrl parsedUrl = new IiopUrl(url);
-
-            NamingException savedException = null;
-
-            for (IiopUrl.Address addr : parsedUrl.getAddresses()) {
-
-                try {
-                    try {
-                        String tmpUrl = "corbaloc:iiop:" + addr.host
-                            + ":" + addr.port + "/NameService";
-                        if (debug) {
-                            System.err.println("Using url: " + tmpUrl);
-                        }
-                        org.omg.CORBA.Object rootCtx =
-                            defOrb.string_to_object(tmpUrl);
-                        setOrbAndRootContext(defOrb, rootCtx);
-                        return parsedUrl.getStringName();
-                    } catch (Exception e) {} // keep going
-
-                    // Get ORB
-                    if (debug) {
-                        System.err.println("Getting ORB for " + addr.host
-                            + " and port " + addr.port);
-                    }
-
-                    // Assign to fields
-                    setOrbAndRootContext(defOrb, (String)null);
-                    return parsedUrl.getStringName();
-
-                } catch (NamingException ne) {
-                    savedException = ne;
-                }
-            }
-            if (savedException != null) {
-                throw savedException;
-            } else {
-                throw new ConfigurationException("Problem with URL: " + url);
-            }
-        } catch (MalformedURLException e) {
-            throw new ConfigurationException(e.getMessage());
-        }
-    }
-
-    /**
-     * Initializes using "corbaname" URL (INS 99-12-03)
-     */
-    private String initUsingCorbanameUrl(ORB orb, String url, Hashtable<?,?> env)
-        throws NamingException {
-
-        if (orb == null)
-                orb = getDefaultOrb();
-
-        try {
-            CorbanameUrl parsedUrl = new CorbanameUrl(url);
-
-            String corbaloc = parsedUrl.getLocation();
-            String cosName = parsedUrl.getStringName();
-
-            setOrbAndRootContext(orb, corbaloc);
-
-            return parsedUrl.getStringName();
-        } catch (MalformedURLException e) {
-            throw new ConfigurationException(e.getMessage());
-        }
-    }
-
-    private void setOrbAndRootContext(ORB orb, String ncIor)
-        throws NamingException {
-        _orb = orb;
-        try {
-            org.omg.CORBA.Object ncRef;
-            if (ncIor != null) {
-                if (debug) {
-                    System.err.println("Passing to string_to_object: " + ncIor);
-                }
-                ncRef = _orb.string_to_object(ncIor);
-            } else {
-                ncRef = _orb.resolve_initial_references("NameService");
-            }
-            if (debug) {
-                System.err.println("Naming Context Ref: " + ncRef);
-            }
-            _nc = NamingContextHelper.narrow(ncRef);
-            if (_nc == null) {
-                if (ncIor != null) {
-                    throw new ConfigurationException(
-                        "Cannot convert IOR to a NamingContext: " + ncIor);
-                } else {
-                    throw new ConfigurationException(
-"ORB.resolve_initial_references(\"NameService\") does not return a NamingContext");
-                }
-            }
-        } catch (org.omg.CORBA.ORBPackage.InvalidName in) {
-            NamingException ne =
-                new ConfigurationException(
-"COS Name Service not registered with ORB under the name 'NameService'");
-            ne.setRootCause(in);
-            throw ne;
-        } catch (org.omg.CORBA.COMM_FAILURE e) {
-            NamingException ne =
-                new CommunicationException("Cannot connect to ORB");
-            ne.setRootCause(e);
-            throw ne;
-        } catch (org.omg.CORBA.BAD_PARAM e) {
-            NamingException ne = new ConfigurationException(
-                "Invalid URL or IOR: " + ncIor);
-            ne.setRootCause(e);
-            throw ne;
-        } catch (org.omg.CORBA.INV_OBJREF e) {
-            NamingException ne = new ConfigurationException(
-                "Invalid object reference: " + ncIor);
-            ne.setRootCause(e);
-            throw ne;
-        }
-    }
-
-    private void setOrbAndRootContext(ORB orb, org.omg.CORBA.Object ncRef)
-        throws NamingException {
-        _orb = orb;
-        try {
-            _nc = NamingContextHelper.narrow(ncRef);
-            if (_nc == null) {
-                throw new ConfigurationException(
-                    "Cannot convert object reference to NamingContext: " + ncRef);
-            }
-        } catch (org.omg.CORBA.COMM_FAILURE e) {
-            NamingException ne =
-                new CommunicationException("Cannot connect to ORB");
-            ne.setRootCause(e);
-            throw ne;
-        }
-    }
-
-    private String getStringifiedIor(String url) throws NamingException {
-        if (url.startsWith("IOR:") || url.startsWith("corbaloc:")) {
-            return url;
-        } else {
-            InputStream in = null;
-            try {
-                URL u = new URL(url);
-                in = u.openStream();
-                if (in != null) {
-                    BufferedReader bufin =
-                        new BufferedReader(new InputStreamReader(in, "8859_1"));
-                    String str;
-                    while ((str = bufin.readLine()) != null) {
-                        if (str.startsWith("IOR:")) {
-                            return str;
-                        }
-                    }
-                }
-            } catch (IOException e) {
-                NamingException ne =
-                    new ConfigurationException("Invalid URL: " + url);
-                ne.setRootCause(e);
-                throw ne;
-            } finally {
-                try {
-                    if (in != null) {
-                        in.close();
-                    }
-                } catch (IOException e) {
-                    NamingException ne =
-                        new ConfigurationException("Invalid URL: " + url);
-                    ne.setRootCause(e);
-                    throw ne;
-                }
-            }
-            throw new ConfigurationException(url + " does not contain an IOR");
-        }
-    }
-
-
-    /**
-      * Does the job of calling the COS Naming API,
-      * resolve, and performs the exception mapping. If the resolved
-      * object is a COS Naming Context (sub-context), then this function
-      * returns a new JNDI naming context object.
-      * @param path the NameComponent[] object.
-      * @exception NotFound No objects under the name.
-      * @exception CannotProceed Unable to obtain a continuation context
-      * @exception InvalidName Name not understood.
-      * @return Resolved object returned by the COS Name Server.
-      */
-    java.lang.Object callResolve(NameComponent[] path)
-        throws NamingException {
-            try {
-                org.omg.CORBA.Object obj = _nc.resolve(path);
-                try {
-                    NamingContext nc =
-                        NamingContextHelper.narrow(obj);
-                    if (nc != null) {
-                        return new CNCtx(_orb, orbTracker, nc, _env,
-                                        makeFullName(path));
-                    } else {
-                        return obj;
-                    }
-                } catch (org.omg.CORBA.SystemException e) {
-                    return obj;
-                }
-            } catch (Exception e) {
-                throw ExceptionMapper.mapException(e, this, path);
-            }
-    }
-
-    /**
-      * Converts the "String" name into a CompositeName
-      * returns the object resolved by the COS Naming api,
-      * resolve. Returns the current context if the name is empty.
-      * Returns either an org.omg.CORBA.Object or javax.naming.Context object.
-      * @param name string used to resolve the object.
-      * @exception NamingException See callResolve.
-      * @return the resolved object
-      */
-    public java.lang.Object lookup(String name) throws NamingException {
-        if (debug) {
-            System.out.println("Looking up: " + name);
-        }
-        return lookup(new CompositeName(name));
-    }
-
-    /**
-      * Converts the "Name" name into a NameComponent[] object and
-      * returns the object resolved by the COS Naming api,
-      * resolve. Returns the current context if the name is empty.
-      * Returns either an org.omg.CORBA.Object or javax.naming.Context object.
-      * @param name JNDI Name used to resolve the object.
-      * @exception NamingException See callResolve.
-      * @return the resolved object
-      */
-    public java.lang.Object lookup(Name name)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            if (name.size() == 0 )
-                return this; // %%% should clone() so that env can be changed
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-
-            try {
-                java.lang.Object answer = callResolve(path);
-
-                try {
-                    return NamingManager.getObjectInstance(answer, name, this, _env);
-                } catch (NamingException e) {
-                    throw e;
-                } catch (Exception e) {
-                    NamingException ne = new NamingException(
-                        "problem generating object using object factory");
-                    ne.setRootCause(e);
-                    throw ne;
-                }
-            } catch (CannotProceedException cpe) {
-                javax.naming.Context cctx = getContinuationContext(cpe);
-                return cctx.lookup(cpe.getRemainingName());
-            }
-    }
-
-    /**
-      * Performs bind or rebind in the context depending on whether the
-      * flag rebind is set. The only objects allowed to be bound are of
-      * types org.omg.CORBA.Object, org.omg.CosNaming.NamingContext.
-      * You can use a state factory to turn other objects (such as
-      * Remote) into these acceptable forms.
-      *
-      * Uses the COS Naming apis bind/rebind or
-      * bind_context/rebind_context.
-      * @param pth NameComponent[] object
-      * @param obj Object to be bound.
-      * @param rebind perform rebind ? if true performs a rebind.
-      * @exception NotFound No objects under the name.
-      * @exception CannotProceed Unable to obtain a continuation context
-      * @exception AlreadyBound An object is already bound to this name.
-      */
-    private void callBindOrRebind(NameComponent[] pth, Name name,
-        java.lang.Object obj, boolean rebind) throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            try {
-                // Call state factories to convert
-                obj = NamingManager.getStateToBind(obj, name, this, _env);
-
-                if (obj instanceof CNCtx) {
-                    // Use naming context object reference
-                    obj = ((CNCtx)obj)._nc;
-                }
-
-                if ( obj instanceof org.omg.CosNaming.NamingContext) {
-                    NamingContext nobj =
-                        NamingContextHelper.narrow((org.omg.CORBA.Object)obj);
-                    if (rebind)
-                        _nc.rebind_context(pth,nobj);
-                    else
-                        _nc.bind_context(pth,nobj);
-
-                } else if (obj instanceof org.omg.CORBA.Object) {
-                    if (rebind)
-                        _nc.rebind(pth,(org.omg.CORBA.Object)obj);
-                    else
-                        _nc.bind(pth,(org.omg.CORBA.Object)obj);
-                }
-                else
-                    throw new IllegalArgumentException(
-                "Only instances of org.omg.CORBA.Object can be bound");
-            } catch (BAD_PARAM e) {
-                // probably narrow() failed?
-                NamingException ne = new NotContextException(name.toString());
-                ne.setRootCause(e);
-                throw ne;
-            } catch (Exception e) {
-                throw ExceptionMapper.mapException(e, this, pth);
-            }
-    }
-
-    /**
-      * Converts the "Name" name into a NameComponent[] object and
-      * performs the bind operation. Uses callBindOrRebind. Throws an
-      * invalid name exception if the name is empty. We need a name to
-      * bind the object even when we work within the current context.
-      * @param name JNDI Name object
-      * @param obj Object to be bound.
-      * @exception NamingException See callBindOrRebind
-      */
-    public  void bind(Name name, java.lang.Object obj)
-        throws NamingException {
-            if (name.size() == 0 ) {
-                throw new InvalidNameException("Name is empty");
-            }
-
-            if (debug) {
-                System.out.println("Bind: " + name);
-            }
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-
-            try {
-                callBindOrRebind(path, name, obj, false);
-            } catch (CannotProceedException e) {
-                javax.naming.Context cctx = getContinuationContext(e);
-                cctx.bind(e.getRemainingName(), obj);
-            }
-    }
-
-    static private javax.naming.Context
-        getContinuationContext(CannotProceedException cpe)
-        throws NamingException {
-        try {
-            return NamingManager.getContinuationContext(cpe);
-        } catch (CannotProceedException e) {
-            java.lang.Object resObj = e.getResolvedObj();
-            if (resObj instanceof Reference) {
-                Reference ref = (Reference)resObj;
-                RefAddr addr = ref.get("nns");
-                if (addr.getContent() instanceof javax.naming.Context) {
-                    NamingException ne = new NameNotFoundException(
-                        "No object reference bound for specified name");
-                    ne.setRootCause(cpe.getRootCause());
-                    ne.setRemainingName(cpe.getRemainingName());
-                    throw ne;
-                }
-            }
-            throw e;
-        }
-    }
-
-    /**
-      * Converts the "String" name into a CompositeName object and
-      * performs the bind operation. Uses callBindOrRebind. Throws an
-      * invalid name exception if the name is empty.
-      * @param name string
-      * @param obj Object to be bound.
-      * @exception NamingException See callBindOrRebind
-      */
-    public void bind(String name, java.lang.Object obj) throws NamingException {
-        bind(new CompositeName(name), obj);
-    }
-
-    /**
-      * Converts the "Name" name into a NameComponent[] object and
-      * performs the rebind operation. Uses callBindOrRebind. Throws an
-      * invalid name exception if the name is empty. We must have a name
-      * to rebind the object to even if we are working within the current
-      * context.
-      * @param name string
-      * @param obj Object to be bound.
-      * @exception NamingException See callBindOrRebind
-      */
-    public  void rebind(Name name, java.lang.Object obj)
-        throws NamingException {
-            if (name.size() == 0 ) {
-                throw new InvalidNameException("Name is empty");
-            }
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-            try {
-                callBindOrRebind(path, name, obj, true);
-            } catch (CannotProceedException e) {
-                javax.naming.Context cctx = getContinuationContext(e);
-                cctx.rebind(e.getRemainingName(), obj);
-            }
-    }
-
-    /**
-      * Converts the "String" name into a CompositeName object and
-      * performs the rebind operation. Uses callBindOrRebind. Throws an
-      * invalid name exception if the name is an empty string.
-      * @param name string
-      * @param obj Object to be bound.
-      * @exception NamingException See callBindOrRebind
-      */
-    public  void rebind(String name, java.lang.Object obj)
-        throws NamingException {
-            rebind(new CompositeName(name), obj);
-    }
-
-    /**
-      * Calls the unbind api of COS Naming and uses the exception mapper
-      * class  to map the exceptions
-      * @param path NameComponent[] object
-      * @exception NotFound No objects under the name. If leaf
-      * is not found, that's OK according to the JNDI spec
-      * @exception CannotProceed Unable to obtain a continuation context
-      * @exception InvalidName Name not understood.
-      */
-    private void callUnbind(NameComponent[] path) throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            try {
-                _nc.unbind(path);
-            } catch (NotFound e) {
-                // If leaf is the one missing, return success
-                // as per JNDI spec
-
-                if (leafNotFound(e, path[path.length-1])) {
-                    // do nothing
-                } else {
-                    throw ExceptionMapper.mapException(e, this, path);
-                }
-            } catch (Exception e) {
-                throw ExceptionMapper.mapException(e, this, path);
-            }
-    }
-
-    private boolean leafNotFound(NotFound e, NameComponent leaf) {
-
-        // This test is not foolproof because some name servers
-        // always just return one component in rest_of_name
-        // so you might not be able to tell whether that is
-        // the leaf (e.g. aa/aa/aa, which one is missing?)
-
-        NameComponent rest;
-        return e.why.value() == NotFoundReason._missing_node &&
-            e.rest_of_name.length == 1 &&
-            (rest=e.rest_of_name[0]).id.equals(leaf.id) &&
-            (rest.kind == leaf.kind ||
-             (rest.kind != null && rest.kind.equals(leaf.kind)));
-    }
-
-    /**
-      * Converts the "String" name into a CompositeName object and
-      * performs the unbind operation. Uses callUnbind. If the name is
-      * empty, throws an invalid name exception. Do we unbind the
-      * current context (JNDI spec says work with the current context if
-      * the name is empty) ?
-      * @param name string
-      * @exception NamingException See callUnbind
-      */
-    public  void unbind(String name) throws NamingException {
-        unbind(new CompositeName(name));
-    }
-
-    /**
-      * Converts the "Name" name into a NameComponent[] object and
-      * performs the unbind operation. Uses callUnbind. Throws an
-      * invalid name exception if the name is empty.
-      * @param name string
-      * @exception NamingException See callUnbind
-      */
-    public  void unbind(Name name)
-        throws NamingException {
-            if (name.size() == 0 )
-                throw new InvalidNameException("Name is empty");
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-            try {
-                callUnbind(path);
-            } catch (CannotProceedException e) {
-                javax.naming.Context cctx = getContinuationContext(e);
-                cctx.unbind(e.getRemainingName());
-            }
-    }
-
-    /**
-      * Renames an object. Since COS Naming does not support a rename
-      * api, this method unbinds the object with the "oldName" and
-      * creates a new binding.
-      * @param oldName string, existing name for the binding.
-      * @param newName string, name used to replace.
-      * @exception NamingException See bind
-      */
-    public  void rename(String oldName,String newName)
-        throws NamingException {
-            rename(new CompositeName(oldName), new CompositeName(newName));
-    }
-
-    /**
-      * Renames an object. Since COS Naming does not support a rename
-      * api, this method unbinds the object with the "oldName" and
-      * creates a new binding.
-      * @param oldName JNDI Name, existing name for the binding.
-      * @param newName JNDI Name, name used to replace.
-      * @exception NamingException See bind
-      */
-    public  void rename(Name oldName,Name newName)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            if (oldName.size() == 0 || newName.size() == 0)
-                throw new InvalidNameException("One or both names empty");
-            java.lang.Object obj = lookup(oldName);
-            bind(newName,obj);
-            unbind(oldName);
-    }
-
-    /**
-      * Returns a NameClassEnumeration object which has a list of name
-      * class pairs. Lists the current context if the name is empty.
-      * @param name string
-      * @exception NamingException All exceptions thrown by lookup
-      * with a non-null argument
-      * @return a list of name-class objects as a NameClassEnumeration.
-      */
-    public  NamingEnumeration<NameClassPair> list(String name) throws NamingException {
-            return list(new CompositeName(name));
-    }
-
-    /**
-      * Returns a NameClassEnumeration object which has a list of name
-      * class pairs. Lists the current context if the name is empty.
-      * @param name JNDI Name
-      * @exception NamingException All exceptions thrown by lookup
-      * @return a list of name-class objects as a NameClassEnumeration.
-      */
-    @SuppressWarnings("unchecked")
-    public  NamingEnumeration<NameClassPair> list(Name name)
-        throws NamingException {
-            return (NamingEnumeration)listBindings(name);
-    }
-
-    /**
-      * Returns a BindingEnumeration object which has a list of name
-      * object pairs. Lists the current context if the name is empty.
-      * @param name string
-      * @exception NamingException all exceptions returned by lookup
-      * @return a list of bindings as a BindingEnumeration.
-      */
-    public  NamingEnumeration<javax.naming.Binding> listBindings(String name)
-        throws NamingException {
-            return listBindings(new CompositeName(name));
-    }
-
-    /**
-      * Returns a BindingEnumeration object which has a list of name
-      * class pairs. Lists the current context if the name is empty.
-      * @param name JNDI Name
-      * @exception NamingException all exceptions returned by lookup.
-      * @return a list of bindings as a BindingEnumeration.
-      */
-    public  NamingEnumeration<javax.naming.Binding> listBindings(Name name)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            if (name.size() > 0) {
-                try {
-                    java.lang.Object obj = lookup(name);
-                    if (obj instanceof CNCtx) {
-                        return new CNBindingEnumeration(
-                                        (CNCtx) obj, true, _env);
-                    } else {
-                        throw new NotContextException(name.toString());
-                    }
-                } catch (NamingException ne) {
-                    throw ne;
-                } catch (BAD_PARAM e) {
-                    NamingException ne =
-                        new NotContextException(name.toString());
-                    ne.setRootCause(e);
-                    throw ne;
-                }
-            }
-            return new CNBindingEnumeration(this, false, _env);
-    }
-
-    /**
-      * Calls the destroy on the COS Naming Server
-      * @param nc The NamingContext object to use.
-      * @exception NotEmpty when the context is not empty and cannot be destroyed.
-      */
-    private void callDestroy(NamingContext nc)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            try {
-                nc.destroy();
-            } catch (Exception e) {
-                throw ExceptionMapper.mapException(e, this, null);
-            }
-    }
-
-    /**
-      * Uses the callDestroy function to destroy the context. If name is
-      * empty destroys the current context.
-      * @param name string
-      * @exception OperationNotSupportedException when list is invoked
-      * with a non-null argument
-      */
-    public  void destroySubcontext(String name) throws NamingException {
-        destroySubcontext(new CompositeName(name));
-    }
-
-    /**
-      * Uses the callDestroy function to destroy the context. Destroys
-      * the current context if name is empty.
-      * @param name JNDI Name
-      * @exception OperationNotSupportedException when list is invoked
-      * with a non-null argument
-      */
-    public  void destroySubcontext(Name name)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            NamingContext the_nc = _nc;
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-            if ( name.size() > 0) {
-                try {
-                    javax.naming.Context ctx =
-                        (javax.naming.Context) callResolve(path);
-                    CNCtx cnc = (CNCtx)ctx;
-                    the_nc = cnc._nc;
-                    cnc.close(); //remove the reference to the context
-                } catch (ClassCastException e) {
-                    throw new NotContextException(name.toString());
-                } catch (CannotProceedException e) {
-                    javax.naming.Context cctx = getContinuationContext(e);
-                    cctx.destroySubcontext(e.getRemainingName());
-                    return;
-                } catch (NameNotFoundException e) {
-                    // If leaf is the one missing, return success
-                    // as per JNDI spec
-
-                    if (e.getRootCause() instanceof NotFound &&
-                        leafNotFound((NotFound)e.getRootCause(),
-                            path[path.length-1])) {
-                        return; // leaf missing OK
-                    }
-                    throw e;
-                } catch (NamingException e) {
-                    throw e;
-                }
-            }
-            callDestroy(the_nc);
-            callUnbind(path);
-    }
-
-    /**
-      * Calls the bind_new_context COS naming api to create a new subcontext.
-      * @param path NameComponent[] object
-      * @exception NotFound No objects under the name.
-      * @exception CannotProceed Unable to obtain a continuation context
-      * @exception InvalidName Name not understood.
-      * @exception AlreadyBound An object is already bound to this name.
-      * @return the new context object.
-      */
-    private javax.naming.Context callBindNewContext(NameComponent[] path)
-        throws NamingException {
-            if (_nc == null)
-                throw new ConfigurationException(
-                    "Context does not have a corresponding NamingContext");
-            try {
-                NamingContext nctx = _nc.bind_new_context(path);
-                return new CNCtx(_orb, orbTracker, nctx, _env,
-                                        makeFullName(path));
-            } catch (Exception e) {
-                throw ExceptionMapper.mapException(e, this, path);
-            }
-    }
-
-    /**
-      * Uses the callBindNewContext convenience function to create a new
-      * context. Throws an invalid name exception if the name is empty.
-      * @param name string
-      * @exception NamingException See callBindNewContext
-      * @return the new context object.
-      */
-    public  javax.naming.Context createSubcontext(String name)
-        throws NamingException {
-            return createSubcontext(new CompositeName(name));
-    }
-
-    /**
-      * Uses the callBindNewContext convenience function to create a new
-      * context. Throws an invalid name exception if the name is empty.
-      * @param name string
-      * @exception NamingException See callBindNewContext
-      * @return the new context object.
-      */
-    public  javax.naming.Context createSubcontext(Name name)
-        throws NamingException {
-            if (name.size() == 0 )
-                throw new InvalidNameException("Name is empty");
-            NameComponent[] path = CNNameParser.nameToCosName(name);
-            try {
-                return callBindNewContext(path);
-            } catch (CannotProceedException e) {
-                javax.naming.Context cctx = getContinuationContext(e);
-                return cctx.createSubcontext(e.getRemainingName());
-            }
-    }
-
-    /**
-      * Is mapped to resolve in the COS Naming api.
-      * @param name string
-      * @exception NamingException See lookup.
-      * @return the resolved object.
-      */
-    public  java.lang.Object lookupLink(String name) throws NamingException {
-            return lookupLink(new CompositeName(name));
-    }
-
-    /**
-      * Is mapped to resolve in the COS Naming api.
-      * @param name string
-      * @exception NamingException See lookup.
-      * @return the resolved object.
-      */
-    public  java.lang.Object lookupLink(Name name) throws NamingException {
-            return lookup(name);
-    }
-
-    /**
-      * Allow access to the name parser object.
-      * @param name JNDI name, is ignored since there is only one Name
-      * Parser object.
-      * @exception NamingException --
-      * @return NameParser object
-      */
-    public  NameParser getNameParser(String name) throws NamingException {
-        return parser;
-    }
-
-    /**
-      * Allow access to the name parser object.
-      * @param name JNDI name, is ignored since there is only one Name
-      * Parser object.
-      * @exception NamingException --
-      * @return NameParser object
-      */
-    public  NameParser getNameParser(Name name) throws NamingException {
-        return parser;
-    }
-
-    /**
-      * Returns the current environment.
-      * @return Environment.
-      */
-    @SuppressWarnings("unchecked")
-    public  Hashtable<String, java.lang.Object> getEnvironment() throws NamingException {
-        if (_env == null) {
-            return new Hashtable<>(5, 0.75f);
-        } else {
-            return (Hashtable<String, java.lang.Object>)_env.clone();
-        }
-    }
-
-    public String composeName(String name, String prefix) throws NamingException {
-        return composeName(new CompositeName(name),
-            new CompositeName(prefix)).toString();
-    }
-
-    public Name composeName(Name name, Name prefix) throws NamingException {
-        Name result = (Name)prefix.clone();
-        return result.addAll(name);
-    }
-
-    /**
-      * Adds to the environment for the current context.
-      * Record change but do not reinitialize ORB.
-      *
-      * @param propName The property name.
-      * @param propValue The ORB.
-      * @return the previous value of this property if any.
-      */
-    @SuppressWarnings("unchecked")
-    public java.lang.Object addToEnvironment(String propName,
-        java.lang.Object propValue)
-        throws NamingException {
-            if (_env == null) {
-                _env = new Hashtable<>(7, 0.75f);
-            } else {
-                // copy-on-write
-                _env = (Hashtable<String, java.lang.Object>)_env.clone();
-            }
-
-            return _env.put(propName, propValue);
-    }
-
-    // Record change but do not reinitialize ORB
-    @SuppressWarnings("unchecked")
-    public java.lang.Object removeFromEnvironment(String propName)
-        throws NamingException {
-            if (_env != null  && _env.get(propName) != null) {
-                // copy-on-write
-                _env = (Hashtable<String, java.lang.Object>)_env.clone();
-                return _env.remove(propName);
-            }
-            return null;
-    }
-
-    synchronized public void incEnumCount() {
-        enumCount++;
-        if (debug) {
-            System.out.println("incEnumCount, new count:" + enumCount);
-        }
-    }
-
-    synchronized public void decEnumCount()
-            throws NamingException {
-        enumCount--;
-        if (debug) {
-            System.out.println("decEnumCount, new count:" + enumCount +
-                        "    isCloseCalled:" + isCloseCalled);
-        }
-        if ((enumCount == 0) && isCloseCalled) {
-            close();
-        }
-    }
-
-    synchronized public void close() throws NamingException {
-
-        if (enumCount > 0) {
-            isCloseCalled = true;
-            return;
-        }
-
-        // Never destroy an orb in CNCtx.
-        // The orb we have is either the shared/default orb, or one passed in to a constructor
-        // from elsewhere, so that orb is somebody else's responsibility.
-    }
-
-    protected void finalize() {
-        try {
-            close();
-        } catch (NamingException e) {
-            // ignore failures
-        }
-    }
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNCtxFactory.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.spi.InitialContextFactory;
-import javax.naming.*;
-
-import java.util.Hashtable;
-
-/**
-  * Implements the JNDI SPI InitialContextFactory interface used to
-  * create  the InitialContext objects.
-  *
-  * @author Raj Krishnamurthy
-  */
-
-public class CNCtxFactory implements InitialContextFactory {
-
-  /**
-    * Creates the InitialContext object. Properties parameter should
-    * should contain the ORB object for the value jndi.corba.orb.
-    * @param env Properties object
-    */
-
-  public Context getInitialContext(Hashtable<?,?> env) throws NamingException {
-      return new CNCtx(env);
-  }
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CNNameParser.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,500 +0,0 @@
-/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.*;
-import java.util.Properties;
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.omg.CosNaming.NameComponent;
-
-/**
-  * Parsing routines for NameParser as well as COS Naming stringified names.
-  * This is used by CNCtx to create a NameComponent[] object and vice versa.
-  * It follows Section 4.5 of Interoperable Naming Service (INS) 98-10-11.
-  * In summary, the stringified form is a left-to-right, forward-slash
-  * separated name. id and kinds are separated by '.'. backslash is the
-  * escape character.
-  *
-  * @author Rosanna Lee
-  */
-
-final public class CNNameParser implements NameParser {
-
-    private static final Properties mySyntax = new Properties();
-    private static final char kindSeparator = '.';
-    private static final char compSeparator = '/';
-    private static final char escapeChar = '\\';
-    static {
-        mySyntax.put("jndi.syntax.direction", "left_to_right");
-        mySyntax.put("jndi.syntax.separator", ""+compSeparator);
-        mySyntax.put("jndi.syntax.escape", ""+escapeChar);
-    };
-
-  /**
-    * Constructs a new name parser for parsing names in INS syntax.
-    */
-    public CNNameParser() {
-    }
-
-  /**
-    * Returns a CompoundName given a string in INS syntax.
-    * @param name The non-null string representation of the name.
-    * @return a non-null CompoundName
-    */
-    public Name parse(String name) throws NamingException {
-        Vector<String> comps = insStringToStringifiedComps(name);
-        return new CNCompoundName(comps.elements());
-    }
-
-    /**
-     * Creates a NameComponent[] from a Name structure.
-     * Used by CNCtx to convert the input Name arg into a NameComponent[].
-     * @param a CompoundName or a CompositeName;
-     * each component must be the stringified form of a NameComponent.
-     */
-    static NameComponent[] nameToCosName(Name name)
-        throws InvalidNameException {
-            int len = name.size();
-            if (len == 0) {
-                return new NameComponent[0];
-            }
-
-            NameComponent[] answer = new NameComponent[len];
-            for (int i = 0; i < len; i++) {
-                answer[i] = parseComponent(name.get(i));
-            }
-            return answer;
-    }
-
-    /**
-     * Returns the INS stringified form of a NameComponent[].
-     * Used by CNCtx.getNameInNamespace(), CNCompoundName.toString().
-     */
-    static String cosNameToInsString(NameComponent[] cname) {
-      StringBuilder str = new StringBuilder();
-      for ( int i = 0; i < cname.length; i++) {
-          if ( i > 0) {
-              str.append(compSeparator);
-          }
-          str.append(stringifyComponent(cname[i]));
-      }
-      return str.toString();
-    }
-
-    /**
-     * Creates a CompositeName from a NameComponent[].
-     * Used by ExceptionMapper and CNBindingEnumeration to convert
-     * a NameComponent[] into a composite name.
-     */
-    static Name cosNameToName(NameComponent[] cname) {
-        Name nm = new CompositeName();
-        for ( int i = 0; cname != null && i < cname.length; i++) {
-            try {
-                nm.add(stringifyComponent(cname[i]));
-            } catch (InvalidNameException e) {
-                // ignore
-            }
-        }
-        return nm;
-    }
-
-    /**
-     * Converts an INS-syntax string name into a Vector in which
-     * each element of the vector contains a stringified form of
-     * a NameComponent.
-     */
-    private static Vector<String> insStringToStringifiedComps(String str)
-        throws InvalidNameException {
-
-        int len = str.length();
-        Vector<String> components = new Vector<>(10);
-        char[] id = new char[len];
-        char[] kind = new char[len];
-        int idCount, kindCount;
-        boolean idMode;
-        for (int i = 0; i < len; ) {
-            idCount = kindCount = 0; // reset for new component
-            idMode = true;           // always start off parsing id
-            while (i < len) {
-                if (str.charAt(i) == compSeparator) {
-                    break;
-
-                } else if (str.charAt(i) == escapeChar) {
-                    if (i + 1 >= len) {
-                        throw new InvalidNameException(str +
-                            ": unescaped \\ at end of component");
-                    } else if (isMeta(str.charAt(i+1))) {
-                        ++i; // skip escape and let meta through
-                        if (idMode) {
-                            id[idCount++] = str.charAt(i++);
-                        } else {
-                            kind[kindCount++] = str.charAt(i++);
-                        }
-                    } else {
-                        throw new InvalidNameException(str +
-                            ": invalid character being escaped");
-                    }
-
-                } else if (idMode && str.charAt(i) == kindSeparator) {
-                    // just look for the first kindSeparator
-                    ++i; // skip kind separator
-                    idMode = false;
-
-                } else {
-                    if (idMode) {
-                        id[idCount++] = str.charAt(i++);
-                    } else {
-                        kind[kindCount++] = str.charAt(i++);
-                    }
-                }
-            }
-            components.addElement(stringifyComponent(
-                new NameComponent(new String(id, 0, idCount),
-                    new String(kind, 0, kindCount))));
-
-            if (i < len) {
-                ++i; // skip separator
-            }
-        }
-
-        return components;
-    }
-
-    /**
-     * Return a NameComponent given its stringified form.
-     */
-    private static NameComponent parseComponent(String compStr)
-    throws InvalidNameException {
-        NameComponent comp = new NameComponent();
-        int kindSep = -1;
-        int len = compStr.length();
-
-        int j = 0;
-        char[] newStr = new char[len];
-        boolean escaped = false;
-
-        // Find the kind separator
-        for (int i = 0; i < len && kindSep < 0; i++) {
-            if (escaped) {
-                newStr[j++] = compStr.charAt(i);
-                escaped = false;
-            } else if (compStr.charAt(i) == escapeChar) {
-                if (i + 1 >= len) {
-                    throw new InvalidNameException(compStr +
-                            ": unescaped \\ at end of component");
-                } else if (isMeta(compStr.charAt(i+1))) {
-                    escaped = true;
-                } else {
-                    throw new InvalidNameException(compStr +
-                        ": invalid character being escaped");
-                }
-            } else if (compStr.charAt(i) == kindSeparator) {
-                kindSep = i;
-            } else {
-                newStr[j++] = compStr.charAt(i);
-            }
-        }
-
-        // Set id
-        comp.id = new String(newStr, 0, j);
-
-        // Set kind
-        if (kindSep < 0) {
-            comp.kind = "";  // no kind separator
-        } else {
-            // unescape kind
-            j = 0;
-            escaped = false;
-            for (int i = kindSep+1; i < len; i++) {
-                if (escaped) {
-                    newStr[j++] = compStr.charAt(i);
-                    escaped = false;
-                } else if (compStr.charAt(i) == escapeChar) {
-                    if (i + 1 >= len) {
-                        throw new InvalidNameException(compStr +
-                            ": unescaped \\ at end of component");
-                    } else if (isMeta(compStr.charAt(i+1))) {
-                        escaped = true;
-                    } else {
-                        throw new InvalidNameException(compStr +
-                            ": invalid character being escaped");
-                    }
-                } else {
-                    newStr[j++] = compStr.charAt(i);
-                }
-            }
-            comp.kind = new String(newStr, 0, j);
-        }
-        return comp;
-    }
-
-    private static String stringifyComponent(NameComponent comp) {
-        StringBuilder one = new StringBuilder(escape(comp.id));
-        if (comp.kind != null && !comp.kind.equals("")) {
-            one.append(kindSeparator).append(escape(comp.kind));
-        }
-        if (one.length() == 0) {
-            return ""+kindSeparator;  // if neither id nor kind specified
-        } else {
-            return one.toString();
-        }
-    }
-
-    /**
-     * Returns a string with '.', '\', '/' escaped. Used when
-     * stringifying the name into its INS stringified form.
-     */
-    private static String escape(String str) {
-        if (str.indexOf(kindSeparator) < 0 &&
-            str.indexOf(compSeparator) < 0 &&
-            str.indexOf(escapeChar) < 0) {
-            return str;                         // no meta characters to escape
-        } else {
-            int len = str.length();
-            int j = 0;
-            char[] newStr = new char[len+len];
-            for (int i = 0; i < len; i++) {
-                if (isMeta(str.charAt(i))) {
-                    newStr[j++] = escapeChar;   // escape meta character
-                }
-                newStr[j++] = str.charAt(i);
-            }
-            return new String(newStr, 0, j);
-        }
-    }
-
-    /**
-     * In INS, there are three meta characters: '.', '/' and '\'.
-     */
-    private static boolean isMeta(char ch) {
-        switch (ch) {
-        case kindSeparator:
-        case compSeparator:
-        case escapeChar:
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * An implementation of CompoundName that bypasses the parsing
-     * and stringifying code of the default CompoundName.
-     */
-    static final class CNCompoundName extends CompoundName {
-        CNCompoundName(Enumeration<String> enum_) {
-            super(enum_, CNNameParser.mySyntax);
-        }
-
-        public Object clone() {
-            return new CNCompoundName(getAll());
-        }
-
-        public Name getPrefix(int posn) {
-            Enumeration<String> comps = super.getPrefix(posn).getAll();
-            return new CNCompoundName(comps);
-        }
-
-        public Name getSuffix(int posn) {
-            Enumeration<String> comps = super.getSuffix(posn).getAll();
-            return new CNCompoundName(comps);
-        }
-
-        public String toString() {
-            try {
-                // Convert Name to NameComponent[] then stringify
-                return cosNameToInsString(nameToCosName(this));
-            } catch (InvalidNameException e) {
-                return super.toString();
-            }
-        }
-
-        private static final long serialVersionUID = -6599252802678482317L;
-    }
-
-// for testing only
-/*
-    private static void print(String input) {
-        try {
-            System.out.println("\n >>>>>> input: " + input);
-
-            System.out.println("--Compound Name: ");
-            NameParser parser = new CNNameParser();
-            Name name = parser.parse(input);
-            for (int i = 0; i < name.size(); i++) {
-                System.out.println("\t" + i + ": " + name.get(i));
-                NameComponent cp = parseComponent(name.get(i));
-                System.out.println("\t\t" + "id: " + cp.id + ";kind: " + cp.kind);
-            }
-            System.out.println("\t" + name.toString());
-
-            System.out.println("--Composite Name: ");
-            Name composite = new CompositeName(input);
-            for (int i = 0; i < composite.size(); i++) {
-                System.out.println("\t" + i+": " + composite.get(i));
-            }
-            System.out.println("\t" + composite.toString());
-
-            System.out.println("--Composite To NameComponent");
-            NameComponent[] names = nameToCosName(composite);
-            for (int i = 0; i < composite.size(); i++) {
-                System.out.println("\t" + i+": id: " + names[i].id + "; kind: " + names[i].kind);
-            }
-            System.out.println("\t" + cosNameToInsString(names));
-        } catch (NamingException e) {
-            System.out.println(e);
-        }
-    }
-
-    private static void checkName(Name name, String[] comps) throws Exception {
-        if (name.size() != comps.length) {
-            throw new Exception(
-                "test failed; incorrect component count in " + name + "; " +
-                "expecting " + comps.length + " got " + name.size());
-        }
-        for (int i = 0; i < name.size(); i++) {
-            if (!comps[i].equals(name.get(i))) {
-                throw new Exception (
-                    "test failed; invalid component in " + name + "; " +
-                    "expecting '" + comps[i] + "' got '" + name.get(i) + "'");
-            }
-        }
-    }
-
-    private static void checkCompound(NameParser parser,
-        String input, String[] comps) throws Exception {
-        checkName(parser.parse(input), comps);
-    }
-
-    private static void checkComposite(String input, String[] comps)
-    throws Exception {
-        checkName(new CompositeName(input), comps);
-    }
-
-    private static String[] compounds = {
-        "a/b/c",
-        "a.b/c.d",
-        "a",
-        ".",
-        "a.",
-        "c.d",
-        ".e",
-        "a/x\\/y\\/z/b",
-        "a\\.b.c\\.d/e.f",
-        "a/b\\\\/c",
-        "x\\\\.y",
-        "x\\.y",
-        "x.\\\\y",
-        "x.y\\\\",
-        "\\\\x.y",
-        "a.b\\.c/d"
-    };
-    private static String[][] compoundComps = {
-        {"a", "b", "c"},
-        {"a.b", "c.d"},
-        {"a"},
-        {"."},
-        {"a"},
-        {"c.d"},
-        {".e"},
-        {"a", "x\\/y\\/z", "b"},
-        {"a\\.b.c\\.d", "e.f"},
-        {"a", "b\\\\", "c"},
-        {"x\\\\.y"},
-        {"x\\.y"},
-        {"x.\\\\y"},
-        {"x.y\\\\"},
-        {"\\\\x.y"},
-        {"a.b\\.c", "d"},
-    };
-
-    private static String[] composites = {
-        "a/b/c",
-        "a.b/c.d",
-        "a",
-        ".",
-        "a.",
-        "c.d",
-        ".e",
-        "a/x\\\\\\/y\\\\\\/z/b",
-        "a\\\\.b.c\\\\.d/e.f",
-        "a/b\\\\\\\\/c",
-        "x\\\\\\.y",
-        "x\\\\.y",
-        "x.\\\\\\\\y",
-        "x.y\\\\\\\\",
-        "\\\\\\\\x.y"
-    };
-
-    private static String[][] compositeComps = {
-        {"a", "b", "c"},
-        {"a.b", "c.d"},
-        {"a"},
-        {"."},
-        {"a."},  // unlike compound, kind sep is not consumed
-        {"c.d"},
-        {".e"},
-        {"a", "x\\/y\\/z", "b"},
-        {"a\\.b.c\\.d", "e.f"},
-        {"a", "b\\\\", "c"},
-        {"x\\\\.y"},
-        {"x\\.y"},
-        {"x.\\\\y"},
-        {"x.y\\\\"},
-        {"\\\\x.y"}
-    };
-
-    public static void main(String[] args) throws Exception {
-        if (args.length > 0) {
-            for (int i = 0; i < args.length; i++) {
-                print(args[0]);
-            }
-        } else {
-            print("x\\\\.y");
-            print("x\\.y");
-            print("x.\\\\y");
-            print("x.y\\\\");
-            print("\\\\x.y");
-        }
-
-        NameParser parser = new com.sun.jndi.cosnaming.CNNameParser();
-        for (int i = 0; i < compounds.length; i++) {
-            checkCompound(parser, compounds[i], compoundComps[i]);
-        }
-        for (int i = 0; i < composites.length; i++) {
-            checkComposite(composites[i], compositeComps[i]);
-        }
-
-        System.out.println("hardwire");
-        NameComponent[] foo = new NameComponent[1];
-        foo[0] = new NameComponent("foo\\", "bar");
-
-        System.out.println(cosNameToInsString(foo));
-        System.out.println(cosNameToName(foo));
-    }
-*/
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/CorbanameUrl.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.Name;
-import javax.naming.NamingException;
-
-import java.net.MalformedURLException;
-import com.sun.jndi.toolkit.url.UrlUtil;
-
-/**
- * Extract components of a "corbaname" URL.
- *
- * The format of an corbaname URL is defined in INS 99-12-03 as follows.
- * <pre>{@code
- * corbaname url = "corbaname:" <corbaloc_obj> ["#" <string_name>]
- * corbaloc_obj  = <obj_addr_list> ["/" <key_string>]
- * obj_addr_list = as defined in a corbaloc URL
- * key_string    = as defined in a corbaloc URL
- * string_name   = stringified COS name | empty_string
- * }</pre>
- * Characters in {@code <string_name>} are escaped as follows.
- * US-ASCII alphanumeric characters are not escaped. Any characters outside
- * of this range are escaped except for the following:
- * <pre>{@code
- *        ; / : ? @ & = + $ , - _ . ! ~ * ; ( )
- * }</pre>
- * Escaped characters is escaped by using a % followed by its 2 hexadecimal
- * numbers representing the octet.
- * <p>
- * The corbaname URL is parsed into two parts: a corbaloc URL and a COS name.
- * The corbaloc URL is constructed by concatenation {@code "corbaloc:"} with
- * {@code <corbaloc_obj>}.
- * The COS name is {@code <string_name>} with the escaped characters resolved.
- * <p>
- * A corbaname URL is resolved by:
- * <ol>
- * <li>Construct a corbaloc URL by concatenating {@code "corbaloc:"} and {@code <corbaloc_obj>}.
- * <li>Resolve the corbaloc URL to a NamingContext by using
- * <pre>{@code
- *     nctx = ORB.string_to_object(corbalocUrl);
- * }</pre>
- * <li>Resolve {@code <string_name>} in the NamingContext.
- * </ol>
- *
- * @author Rosanna Lee
- */
-
-public final class CorbanameUrl {
-    private String stringName;
-    private String location;
-
-    /**
-     * Returns a possibly empty but non-null string that is the "string_name"
-     * portion of the URL.
-     */
-    public String getStringName() {
-        return stringName;
-    }
-
-    public Name getCosName() throws NamingException {
-        return CNCtx.parser.parse(stringName);
-    }
-
-    public String getLocation() {
-        return "corbaloc:" + location;
-    }
-
-    public CorbanameUrl(String url) throws MalformedURLException {
-
-        if (!url.startsWith("corbaname:")) {
-            throw new MalformedURLException("Invalid corbaname URL: " + url);
-        }
-
-        int addrStart = 10;  // "corbaname:"
-
-        int addrEnd = url.indexOf('#', addrStart);
-        if (addrEnd < 0) {
-            addrEnd = url.length();
-            stringName = "";
-        } else {
-            stringName = UrlUtil.decode(url.substring(addrEnd+1));
-        }
-        location = url.substring(addrStart, addrEnd);
-
-        int keyStart = location.indexOf('/');
-        if (keyStart >= 0) {
-            // Has key string
-            if (keyStart == (location.length() -1)) {
-                location += "NameService";
-            }
-        } else {
-            location += "/NameService";
-        }
-    }
-/*
-    // for testing only
-    public static void main(String[] args) {
-        try {
-            CorbanameUrl url = new CorbanameUrl(args[0]);
-
-            System.out.println("location: " + url.getLocation());
-            System.out.println("string name: " + url.getStringName());
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-        }
-    }
-*/
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/ExceptionMapper.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,242 +0,0 @@
-/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.*;
-
-import org.omg.CosNaming.*;
-import org.omg.CosNaming.NamingContextPackage.*;
-import org.omg.CORBA.*;
-
-/**
-  * A convenience class to map the COS Naming exceptions to the JNDI exceptions.
-  * @author Raj Krishnamurthy
-  */
-
-public final class ExceptionMapper {
-    private ExceptionMapper() {} // ensure no instance
-    private static final boolean debug = false;
-
-    public static final NamingException mapException(Exception e,
-        CNCtx ctx, NameComponent[] inputName) throws NamingException {
-        if (e instanceof NamingException) {
-            return (NamingException)e;
-        }
-
-        if (e instanceof RuntimeException) {
-            throw (RuntimeException)e;
-        }
-
-        NamingException ne;
-        if (e instanceof NotFound) {
-            if (ctx.federation) {
-                return tryFed((NotFound)e, ctx, inputName);
-
-            } else {
-                ne = new NameNotFoundException();
-            }
-
-        } else if (e instanceof CannotProceed) {
-
-            ne = new CannotProceedException();
-            NamingContext nc = ((CannotProceed) e).cxt;
-            NameComponent[] rest = ((CannotProceed) e).rest_of_name;
-
-            // %%% We assume that rest returns *all* unprocessed components.
-            // Don't' know if that is a good assumption, given
-            // NotFound doesn't set rest as expected. -RL
-            if (inputName != null && (inputName.length > rest.length)) {
-                NameComponent[] resolvedName =
-                    new NameComponent[inputName.length - rest.length];
-                System.arraycopy(inputName, 0, resolvedName, 0, resolvedName.length);
-                // Wrap resolved NamingContext inside a CNCtx
-                // Guess that its name (which is relative to ctx)
-                // is the part of inputName minus rest_of_name
-                ne.setResolvedObj(new CNCtx(ctx._orb, ctx.orbTracker, nc,
-                                                ctx._env,
-                    ctx.makeFullName(resolvedName)));
-            } else {
-                ne.setResolvedObj(ctx);
-            }
-
-            ne.setRemainingName(CNNameParser.cosNameToName(rest));
-
-        } else if (e instanceof InvalidName) {
-            ne = new InvalidNameException();
-        } else if (e instanceof AlreadyBound) {
-            ne = new NameAlreadyBoundException();
-        } else if (e instanceof NotEmpty) {
-            ne = new ContextNotEmptyException();
-        } else {
-            ne = new NamingException("Unknown reasons");
-        }
-
-        ne.setRootCause(e);
-        return ne;
-    }
-
-    private static final NamingException tryFed(NotFound e, CNCtx ctx,
-        NameComponent[] inputName) throws NamingException {
-        NameComponent[] rest = e.rest_of_name;
-
-        if (debug) {
-            System.out.println(e.why.value());
-            System.out.println(rest.length);
-        }
-
-        // %%% Using 1.2 & 1.3 Sun's tnameserv, 'rest' contains only the first
-        // component that failed, not *rest* as advertized. This is useless
-        // because what if you have something like aa/aa/aa/aa/aa.
-        // If one of those is not found, you get "aa" as 'rest'.
-        if (rest.length == 1 && inputName != null) {
-            // Check that we're not talking to 1.2/1.3 Sun tnameserv
-            NameComponent lastIn = inputName[inputName.length-1];
-            if (rest[0].id.equals(lastIn.id) &&
-                rest[0].kind != null &&
-                rest[0].kind.equals(lastIn.kind)) {
-                // Might be legit
-                ;
-            } else {
-                // Due to 1.2/1.3 bug that always returns single-item 'rest'
-                NamingException ne = new NameNotFoundException();
-                ne.setRemainingName(CNNameParser.cosNameToName(rest));
-                ne.setRootCause(e);
-                throw ne;
-            }
-        }
-        // Fixed in 1.4; perform calculations based on correct (1.4) behavior
-
-        // Calculate the components of the name that has been resolved
-        NameComponent[] resolvedName = null;
-        int len = 0;
-        if (inputName != null && (inputName.length >= rest.length)) {
-
-            if (e.why == NotFoundReason.not_context) {
-                // First component of rest is found but not a context; keep it
-                // as part of resolved name
-                len = inputName.length - (rest.length - 1);
-
-                // Remove resolved component from rest
-                if (rest.length == 1) {
-                    // No more remaining
-                    rest = null;
-                } else {
-                    NameComponent[] tmp = new NameComponent[rest.length-1];
-                    System.arraycopy(rest, 1, tmp, 0, tmp.length);
-                    rest = tmp;
-                }
-            } else {
-                len = inputName.length - rest.length;
-            }
-
-            if (len > 0) {
-                resolvedName = new NameComponent[len];
-                System.arraycopy(inputName, 0, resolvedName, 0, len);
-            }
-        }
-
-        // Create CPE and set common fields
-        CannotProceedException cpe = new CannotProceedException();
-        cpe.setRootCause(e);
-        if (rest != null && rest.length > 0) {
-            cpe.setRemainingName(CNNameParser.cosNameToName(rest));
-        }
-        cpe.setEnvironment(ctx._env);
-
-        if (debug) {
-            System.out.println("rest of name: " + cpe.getRemainingName());
-        }
-
-        // Lookup resolved name to get resolved object
-        final java.lang.Object resolvedObj =
-            (resolvedName != null) ? ctx.callResolve(resolvedName) : ctx;
-
-        if (resolvedObj instanceof javax.naming.Context) {
-            // obj is a context and child is not found
-            // try getting its nns dynamically by constructing
-            // a Reference containing obj.
-            RefAddr addr = new RefAddr("nns") {
-                public java.lang.Object getContent() {
-                    return resolvedObj;
-                }
-                private static final long serialVersionUID =
-                    669984699392133792L;
-            };
-            Reference ref = new Reference("java.lang.Object", addr);
-
-            // Resolved name has trailing slash to indicate nns
-            CompositeName cname = new CompositeName();
-            cname.add(""); // add trailing slash
-
-            cpe.setResolvedObj(ref);
-            cpe.setAltName(cname);
-            cpe.setAltNameCtx((javax.naming.Context)resolvedObj);
-
-            return cpe;
-        } else {
-            // Not a context, use object factory to transform object.
-
-            Name cname = CNNameParser.cosNameToName(resolvedName);
-            java.lang.Object resolvedObj2;
-            try {
-                resolvedObj2 = NamingManager.getObjectInstance(resolvedObj,
-                    cname, ctx, ctx._env);
-            } catch (NamingException ge) {
-                throw ge;
-            } catch (Exception ge) {
-                NamingException ne = new NamingException(
-                    "problem generating object using object factory");
-                ne.setRootCause(ge);
-                throw ne;
-            }
-
-            // If a context, continue operation with context
-            if (resolvedObj2 instanceof javax.naming.Context) {
-                cpe.setResolvedObj(resolvedObj2);
-            } else {
-                // Add trailing slash
-                cname.add("");
-                cpe.setAltName(cname);
-
-                // Create nns reference
-                final java.lang.Object rf2 = resolvedObj2;
-                RefAddr addr = new RefAddr("nns") {
-                    public java.lang.Object getContent() {
-                        return rf2;
-                    }
-                    private static final long serialVersionUID =
-                        -785132553978269772L;
-                };
-                Reference ref = new Reference("java.lang.Object", addr);
-                cpe.setResolvedObj(ref);
-                cpe.setAltNameCtx(ctx);
-            }
-            return cpe;
-        }
-    }
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/IiopUrl.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,228 +0,0 @@
-/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.Name;
-import javax.naming.NamingException;
-
-import java.net.MalformedURLException;
-import java.util.Vector;
-import java.util.StringTokenizer;
-import com.sun.jndi.toolkit.url.UrlUtil;
-
-/**
- * Extract components of an "iiop" or "iiopname" URL.
- *
- * The format of an iiopname URL is defined in INS 98-10-11 as follows:
- *
- * <pre>
- * iiopname url = "iiopname://" [addr_list]["/" string_name]
- * addr_list    = [address ","]* address
- * address      = [version host [":" port]]
- * host         = DNS style host name | IP address
- * version      = major "." minor "@" | empty_string
- * port         = number
- * major        = number
- * minor        = number
- * string_name  = stringified name | empty_string
- * </pre>
- *
- * The default port is 9999. The default version is "1.0"
- * US-ASCII alphanumeric characters are not escaped. Any characters outside
- * of this range are escaped except for the following:
- * <pre>{@code
- * ; / : ? : @ & = + $ , - _ . ! ~ *  ' ( )
- * }</pre>
- * Escaped characters is escaped by using a % followed by its 2 hexadecimal
- * numbers representing the octet.
- *
- * For backward compatibility,  the "iiop" URL as defined in INS 97-6-6
- * is also supported:
- * <pre>{@code
- * iiop url     = "iiop://" [host [":" port]] ["/" string_name]
- * }</pre>
- * The default port is 900.
- *
- * @author Rosanna Lee
- */
-
-public final class IiopUrl {
-    static final private int DEFAULT_IIOPNAME_PORT = 9999;
-    static final private int DEFAULT_IIOP_PORT = 900;
-    static final private String DEFAULT_HOST = "localhost";
-    private Vector<Address> addresses;
-    private String stringName;
-
-    public static class Address {
-        public int port = -1;
-        public int major, minor;
-        public String host;
-
-        public Address(String hostPortVers, boolean oldFormat)
-            throws MalformedURLException {
-            // [version host [":" port]]
-            int start;
-
-            // Parse version
-            int at;
-            if (oldFormat || (at = hostPortVers.indexOf('@')) < 0) {
-                major = 1;
-                minor = 0;
-                start = 0;     // start at the beginning
-            } else {
-                int dot = hostPortVers.indexOf('.');
-                if (dot < 0) {
-                    throw new MalformedURLException(
-                        "invalid version: " + hostPortVers);
-                }
-                try {
-                    major = Integer.parseInt(hostPortVers.substring(0, dot));
-                    minor = Integer.parseInt(hostPortVers.substring(dot+1, at));
-                } catch (NumberFormatException e) {
-                    throw new MalformedURLException(
-                        "Nonnumeric version: " + hostPortVers);
-                }
-                start = at + 1;  // skip '@' sign
-            }
-
-            // Parse host and port
-            int slash = hostPortVers.indexOf('/', start);
-            if (slash < 0) {
-                slash = hostPortVers.length();
-            }
-            if (hostPortVers.startsWith("[", start)) {  // at IPv6 literal
-                int brac = hostPortVers.indexOf(']', start + 1);
-                if (brac < 0 || brac > slash) {
-                    throw new IllegalArgumentException(
-                        "IiopURL: name is an Invalid URL: " + hostPortVers);
-                }
-
-                // include brackets
-                host = hostPortVers.substring(start, brac + 1);
-                start = brac + 1;
-            } else {      // at hostname or IPv4
-                int colon = hostPortVers.indexOf(':', start);
-                int hostEnd = (colon < 0 || colon > slash)
-                    ? slash
-                    : colon;
-                if (start < hostEnd) {
-                    host = hostPortVers.substring(start, hostEnd);
-                }
-                start = hostEnd;   // skip past host
-            }
-            if ((start + 1 < slash)) {
-                if ( hostPortVers.startsWith(":", start)) { // parse port
-                    start++;    // skip past ":"
-                    port = Integer.parseInt(hostPortVers.
-                                            substring(start, slash));
-                } else {
-                    throw new IllegalArgumentException(
-                        "IiopURL: name is an Invalid URL: " + hostPortVers);
-                }
-            }
-            start = slash;
-            if ("".equals(host) || host == null) {
-                host = DEFAULT_HOST ;
-            }
-            if (port == -1) {
-                port = (oldFormat ? DEFAULT_IIOP_PORT :
-                                DEFAULT_IIOPNAME_PORT);
-            }
-        }
-    }
-
-    public Vector<Address> getAddresses() {
-        return addresses;
-    }
-
-    /**
-     * Returns a possibly empty but non-null string that is the "string_name"
-     * portion of the URL.
-     */
-    public String getStringName() {
-        return stringName;
-    }
-
-    public Name getCosName() throws NamingException {
-        return CNCtx.parser.parse(stringName);
-    }
-
-    public IiopUrl(String url) throws MalformedURLException {
-        int addrStart;
-        boolean oldFormat;
-
-        if (url.startsWith("iiopname://")) {
-            oldFormat = false;
-            addrStart = 11;
-        } else if (url.startsWith("iiop://")) {
-            oldFormat = true;
-            addrStart = 7;
-        } else {
-            throw new MalformedURLException("Invalid iiop/iiopname URL: " + url);
-        }
-        int addrEnd = url.indexOf('/', addrStart);
-        if (addrEnd < 0) {
-            addrEnd = url.length();
-            stringName = "";
-        } else {
-            stringName = UrlUtil.decode(url.substring(addrEnd+1));
-        }
-        addresses = new Vector<>(3);
-        if (oldFormat) {
-            // Only one host:port part, not multiple
-            addresses.addElement(
-                new Address(url.substring(addrStart, addrEnd), oldFormat));
-        } else {
-            StringTokenizer tokens =
-                new StringTokenizer(url.substring(addrStart, addrEnd), ",");
-            while (tokens.hasMoreTokens()) {
-                addresses.addElement(new Address(tokens.nextToken(), oldFormat));
-            }
-            if (addresses.size() == 0) {
-                addresses.addElement(new Address("", oldFormat));
-            }
-        }
-    }
-
-    // for testing only
-    /*public static void main(String[] args) {
-        try {
-            IiopUrl url = new IiopUrl(args[0]);
-            Vector addrs = url.getAddresses();
-            String name = url.getStringName();
-
-            for (int i = 0; i < addrs.size(); i++) {
-                Address addr = (Address)addrs.elementAt(i);
-                System.out.println("host: " + addr.host);
-                System.out.println("port: " + addr.port);
-                System.out.println("version: " + addr.major + " " + addr.minor);
-            }
-            System.out.println("name: " + name);
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-        }
-    } */
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/OrbReuseTracker.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.cosnaming;
-
-import org.omg.CORBA.ORB;
-
-/**
- * This class keeps track of references to the shared ORB object
- * and destroys it when no more references are made to the ORB
- * object. This object is created for each ORB object that CNCtx
- * creates.
- */
-class OrbReuseTracker {
-
-    int referenceCnt;
-    ORB orb;
-
-    private static final boolean debug = false;
-
-    OrbReuseTracker(ORB orb) {
-        this.orb = orb;
-        referenceCnt++;
-        if (debug) {
-             System.out.println("New OrbReuseTracker created");
-        }
-    }
-
-    synchronized void incRefCount() {
-        referenceCnt++;
-        if (debug) {
-             System.out.println("Increment orb ref count to:" + referenceCnt);
-        }
-    }
-
-    synchronized void decRefCount() {
-        referenceCnt--;
-        if (debug) {
-             System.out.println("Decrement orb ref count to:" + referenceCnt);
-        }
-        if ((referenceCnt == 0)) {
-            if (debug) {
-                System.out.println("Destroying the ORB");
-            }
-            orb.destroy();
-        }
-    }
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/RemoteToCorba.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.cosnaming;
-
-import javax.naming.*;
-import javax.naming.spi.StateFactory;
-import java.util.Hashtable;
-
-import org.omg.CORBA.ORB;
-
-import java.rmi.Remote;
-import java.rmi.server.ExportException;
-
-import com.sun.jndi.toolkit.corba.CorbaUtils;  // for RMI-IIOP
-
-/**
-  * StateFactory that turns java.rmi.Remote objects to org.omg.CORBA.Object.
-  *
-  * @author Rosanna Lee
-  */
-
-public class RemoteToCorba implements StateFactory {
-    public RemoteToCorba() {
-    }
-
-    /**
-     * Returns the CORBA object for a Remote object.
-     * If input is not a Remote object, or if Remote object uses JRMP, return null.
-     * If the RMI-IIOP library is not available, throw ConfigurationException.
-     *
-     * @param orig The object to turn into a CORBA object. If not Remote,
-     *             or if is a JRMP stub or impl, return null.
-     * @param name Ignored
-     * @param ctx The non-null CNCtx whose ORB to use.
-     * @param env Ignored
-     * @return The CORBA object for {@code orig} or null.
-     * @exception ConfigurationException If the CORBA object cannot be obtained
-     *    due to configuration problems, for instance, if RMI-IIOP not available.
-     * @exception NamingException If some other problem prevented a CORBA
-     *    object from being obtained from the Remote object.
-     */
-    public Object getStateToBind(Object orig, Name name, Context ctx,
-        Hashtable<?,?> env) throws NamingException {
-        if (orig instanceof org.omg.CORBA.Object) {
-            // Already a CORBA object, just use it
-            return null;
-        }
-
-        if (orig instanceof Remote) {
-            // Turn remote object into org.omg.CORBA.Object
-            // Returns null if JRMP; let next factory try
-            // CNCtx will eventually throw IllegalArgumentException if
-            // no CORBA object gotten
-            return CorbaUtils.remoteToCorba((Remote)orig, ((CNCtx)ctx)._orb);
-        }
-        return null; // pass and let next state factory try
-    }
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/cosnaming/jndiprovider.properties	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-# Provider resource file for the COS Naming service provider.
-
-# State factory to turn java.rmi.Remote into org.omg.CORBA.Object.
-java.naming.factory.state=com.sun.jndi.cosnaming.RemoteToCorba
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/toolkit/corba/CorbaUtils.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.toolkit.corba;
-
-// Needed for RMI/IIOP
-import java.rmi.Remote;
-
-import java.rmi.RemoteException;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.Enumeration;
-import java.applet.Applet;
-
-import org.omg.CORBA.ORB;
-
-import javax.naming.Context;
-import javax.naming.ConfigurationException;
-import javax.rmi.CORBA.Stub;
-import javax.rmi.PortableRemoteObject;
-
-/**
-  * Contains utilities for performing CORBA-related tasks:
-  * 1. Get the org.omg.CORBA.Object for a java.rmi.Remote object.
-  * 2. Create an ORB to use for a given host/port, and environment properties.
-  *
-  * @author Simon Nash
-  * @author Bryan Atsatt
-  */
-
-public class CorbaUtils {
-    /**
-      * Returns the CORBA object reference associated with a Remote
-      * object by using the javax.rmi.CORBA package.
-      *<p>
-      * This method effective does the following:
-      * <blockquote><pre>
-      * java.lang.Object stub;
-      * try {
-      *     stub = PortableRemoteObject.toStub(remoteObj);
-      * } catch (Exception e) {
-      *     throw new ConfigurationException("Object not exported or not found");
-      * }
-      * if (!(stub instanceof javax.rmi.CORBA.Stub)) {
-      *     return null; // JRMP impl or JRMP stub
-      * }
-      * try {
-      *     ((javax.rmi.CORBA.Stub)stub).connect(orb);  // try to connect IIOP stub
-      * } catch (RemoteException e) {
-      *     // ignore 'already connected' error
-      * }
-      * return (javax.rmi.CORBA.Stub)stub;
-      * </pre></blockquote>
-      *
-      * @param remoteObj The non-null remote object for
-      * @param orb       The non-null ORB to connect the remote object to
-      * @return The CORBA Object for remoteObj; null if {@code remoteObj}
-      *                 is a JRMP implementation or JRMP stub.
-      * @exception ConfigurationException The CORBA Object cannot be obtained
-      *         because of configuration problems.
-      */
-    public static org.omg.CORBA.Object remoteToCorba(Remote remoteObj, ORB orb)
-        throws ConfigurationException {
-
-// First, get remoteObj's stub
-
-            // javax.rmi.CORBA.Stub stub = PortableRemoteObject.toStub(remoteObj);
-
-            Remote stub;
-
-            try {
-                stub = PortableRemoteObject.toStub(remoteObj);
-            } catch (Throwable t) {
-                ConfigurationException ce = new ConfigurationException(
-    "Problem with PortableRemoteObject.toStub(); object not exported or stub not found");
-                ce.setRootCause(t);
-                throw ce;
-            }
-
-// Next, make sure that the stub is javax.rmi.CORBA.Stub
-
-            if (!(stub instanceof Stub)) {
-                return null;  // JRMP implementation or JRMP stub
-            }
-
-// Next, make sure that the stub is connected
-            try {
-                ((Stub) stub).connect(orb);
-            } catch (RemoteException e) {
-                // ignore RemoteException because stub might have already
-                // been connected
-            } catch (Throwable t) {
-                ConfigurationException ce = new ConfigurationException(
-                        "Problem invoking javax.rmi.CORBA.Stub.connect()");
-                ce.setRootCause(t);
-                throw ce;
-            }
-// Finally, return stub
-            return (org.omg.CORBA.Object)stub;
-    }
-
-    /**
-     * Get ORB using given server and port number, and properties from environment.
-     *
-     * @param server Possibly null server; if null means use default;
-     *               For applet, it is the applet host; for app, it is localhost.
-     * @param port   Port number, -1 means default port
-     * @param env    Possibly null environment. Contains environment properties.
-     *               Could contain ORB itself; or applet used for initializing ORB.
-     *               Use all String properties from env for initializing ORB
-     * @return A non-null ORB.
-     */
-    public static ORB getOrb(String server, int port, Hashtable<?,?> env) {
-        // See if we can get info from environment
-        Properties orbProp;
-
-        // Extract any org.omg.CORBA properties from environment
-        if (env != null) {
-            if (env instanceof Properties) {
-                // Already a Properties, just clone
-                orbProp = (Properties) env.clone();
-            } else {
-                // Get all String properties
-                Enumeration<?> envProp;
-                orbProp = new Properties();
-                for (envProp = env.keys(); envProp.hasMoreElements();) {
-                    String key = (String)envProp.nextElement();
-                    Object val = env.get(key);
-                    if (val instanceof String) {
-                        orbProp.put(key, val);
-                    }
-                }
-            }
-        } else {
-            orbProp = new Properties();
-        }
-
-        if (server != null) {
-            orbProp.put("org.omg.CORBA.ORBInitialHost", server);
-        }
-        if (port >= 0) {
-            orbProp.put("org.omg.CORBA.ORBInitialPort", ""+port);
-        }
-
-        // Get Applet from environment
-        if (env != null) {
-            @SuppressWarnings("deprecation")
-            Applet applet = (Applet) env.get(Context.APPLET);
-            if (applet != null) {
-            // Create ORBs using applet and orbProp
-                return ORB.init(applet, orbProp);
-            }
-        }
-
-        return ORB.init(new String[0], orbProp);
-    }
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/url/corbaname/corbanameURLContextFactory.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.url.corbaname;
-
-import com.sun.jndi.url.iiop.iiopURLContextFactory;
-
-/**
- * A corbaname URL context factory.
- * It just uses the iiop URL context factory but is needed here
- * so that NamingManager.getURLContext() will find it.
- *
- * @author Rosanna Lee
- */
-final public class corbanameURLContextFactory extends iiopURLContextFactory {
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/url/iiop/iiopURLContext.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.url.iiop;
-
-import javax.naming.spi.ResolveResult;
-import javax.naming.*;
-import java.util.Hashtable;
-import java.net.MalformedURLException;
-
-import com.sun.jndi.cosnaming.IiopUrl;
-import com.sun.jndi.cosnaming.CorbanameUrl;
-
-/**
- * An IIOP URL context.
- *
- * @author Rosanna Lee
- */
-
-public class iiopURLContext
-        extends com.sun.jndi.toolkit.url.GenericURLContext {
-
-    iiopURLContext(Hashtable<?,?> env) {
-        super(env);
-    }
-
-    /**
-      * Resolves 'name' into a target context with remaining name.
-      * It only resolves the hostname/port number. The remaining name
-      * contains the rest of the name found in the URL.
-      *
-      * For example, with a iiop URL "iiop://localhost:900/rest/of/name",
-      * this method resolves "iiop://localhost:900/" to the "NameService"
-      * context on for the ORB at 'localhost' on port 900,
-      * and returns as the remaining name "rest/of/name".
-      */
-    protected ResolveResult getRootURLContext(String name, Hashtable<?,?> env)
-    throws NamingException {
-        return iiopURLContextFactory.getUsingURLIgnoreRest(name, env);
-    }
-
-    /**
-     * Return the suffix of an "iiop", "iiopname", or "corbaname" url.
-     * prefix parameter is ignored.
-     */
-    protected Name getURLSuffix(String prefix, String url)
-        throws NamingException {
-        try {
-            if (url.startsWith("iiop://") || url.startsWith("iiopname://")) {
-                IiopUrl parsedUrl = new IiopUrl(url);
-                return parsedUrl.getCosName();
-            } else if (url.startsWith("corbaname:")) {
-                CorbanameUrl parsedUrl = new CorbanameUrl(url);
-                return parsedUrl.getCosName();
-            } else {
-                throw new MalformedURLException("Not a valid URL: " + url);
-            }
-        } catch (MalformedURLException e) {
-            throw new InvalidNameException(e.getMessage());
-        }
-    }
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/url/iiop/iiopURLContextFactory.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.url.iiop;
-
-import javax.naming.*;
-import javax.naming.spi.*;
-
-import java.util.Hashtable;
-
-import com.sun.jndi.cosnaming.CNCtx;
-
-/**
- * An IIOP URL context factory.
- *
- * @author Rosanna Lee
- */
-
-public class iiopURLContextFactory implements ObjectFactory {
-
-    public Object getObjectInstance(Object urlInfo, Name name, Context nameCtx,
-                                    Hashtable<?,?> env) throws Exception {
-
-//System.out.println("iiopURLContextFactory " + urlInfo);
-        if (urlInfo == null) {
-            return new iiopURLContext(env);
-        }
-        if (urlInfo instanceof String) {
-            return getUsingURL((String)urlInfo, env);
-        } else if (urlInfo instanceof String[]) {
-            return getUsingURLs((String[])urlInfo, env);
-        } else {
-            throw (new IllegalArgumentException(
-                    "iiopURLContextFactory.getObjectInstance: " +
-                    "argument must be a URL String or array of URLs"));
-        }
-    }
-
-    /**
-      * Resolves 'name' into a target context with remaining name.
-      * It only resolves the hostname/port number. The remaining name
-      * contains the rest of the name found in the URL.
-      *
-      * For example, with a iiop URL "iiop://localhost:900/rest/of/name",
-      * this method resolves "iiop://localhost:900/" to the "NameService"
-      * context on for the ORB at 'localhost' on port 900,
-      * and returns as the remaining name "rest/of/name".
-      */
-    static ResolveResult getUsingURLIgnoreRest(String url, Hashtable<?,?> env)
-        throws NamingException {
-        return CNCtx.createUsingURL(url, env);
-    }
-
-    private static Object getUsingURL(String url, Hashtable<?,?> env)
-        throws NamingException {
-        ResolveResult res = getUsingURLIgnoreRest(url, env);
-
-        Context ctx = (Context)res.getResolvedObj();
-        try {
-            return ctx.lookup(res.getRemainingName());
-        } finally {
-            ctx.close();
-        }
-    }
-
-    private static Object getUsingURLs(String[] urls, Hashtable<?,?> env) {
-        for (int i = 0; i < urls.length; i++) {
-            String url = urls[i];
-            try {
-                Object obj = getUsingURL(url, env);
-                if (obj != null) {
-                    return obj;
-                }
-            } catch (NamingException e) {
-            }
-        }
-        return null;    // %%% exception??
-    }
-}
--- a/jdk/src/java.corba/share/classes/com/sun/jndi/url/iiopname/iiopnameURLContextFactory.java	Thu Dec 15 17:34:59 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.jndi.url.iiopname;
-
-import com.sun.jndi.url.iiop.iiopURLContextFactory;
-
-/**
- * An iiopname URL context factory.
- * It just uses the iiop URL context factory but is needed here
- * so that NamingManager.getURLContext() will find it.
- *
- * @author Rosanna Lee
- */
-final public class iiopnameURLContextFactory extends iiopURLContextFactory {
-}
--- a/jdk/src/java.naming/share/classes/module-info.java	Thu Dec 15 17:34:59 2016 +0800
+++ b/jdk/src/java.naming/share/classes/module-info.java	Mon Dec 19 16:00:59 2016 +0000
@@ -37,7 +37,6 @@
     exports com.sun.jndi.toolkit.ctx to
         jdk.naming.dns;
     exports com.sun.jndi.toolkit.url to
-        java.corba,
         jdk.naming.dns,
         jdk.naming.rmi;
     uses javax.naming.ldap.StartTlsResponse;