8164907: Eliminate dependency on java.naming/com.sun.jndi.toolkit.url
Reviewed-by: chegar, rriggs
--- 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;