136 lines · 4.9 KB · Java
RawDownload
/* * 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.url.rmi; import java.util.Hashtable;import java.rmi.registry.LocateRegistry; import javax.naming.*;import javax.naming.spi.ResolveResult;import com.sun.jndi.toolkit.url.GenericURLContext;import com.sun.jndi.rmi.registry.RegistryContext;  /** * An RMI URL context resolves names that are URLs of the form * <pre> *   rmi://[host][:port][/[object]] * or *   rmi:[/][object] * </pre> * If an object is specified, the URL resolves to the named object. * Otherwise, the URL resolves to the specified RMI registry. * * @author Scott Seligman */public class rmiURLContext extends GenericURLContext {     public rmiURLContext(Hashtable env) {        super(env);    }     /**     * Resolves the registry portion of "url" to the corresponding     * RMI registry, and returns the atomic object name as the     * remaining name.     */    protected ResolveResult getRootURLContext(String url, Hashtable env)            throws NamingException    {        if (!url.startsWith("rmi:")) {            throw (new IllegalArgumentException(                    "rmiURLContext: name is not an RMI URL: " + url));        }         // Parse the URL.         String host = null;        int port = -1;        String objName = null;         int i = 4;              // index into url, following the "rmi:"         if (url.startsWith("//", i)) {          // parse "//host:port"            i += 2;                             // skip past "//"            int slash = url.indexOf('/', i);            if (slash < 0) {                slash = url.length();            }            if (url.startsWith("[", i)) {               // at IPv6 literal                int brac = url.indexOf(']', i + 1);                if (brac < 0 || brac > slash) {                    throw new IllegalArgumentException(                        "rmiURLContext: name is an Invalid URL: " + url);                }                host = url.substring(i, brac + 1);      // include brackets                i = brac + 1;                           // skip past "[...]"            } else {                                    // at host name or IPv4                int colon = url.indexOf(':', i);                int hostEnd = (colon < 0 || colon > slash)                    ? slash                    : colon;                if (i < hostEnd) {                    host = url.substring(i, hostEnd);                }                i = hostEnd;                            // skip past host            }            if ((i + 1 < slash)) {                if ( url.startsWith(":", i)) {       // parse port                    i++;                             // skip past ":"                    port = Integer.parseInt(url.substring(i, slash));                } else {                    throw new IllegalArgumentException(                        "rmiURLContext: name is an Invalid URL: " + url);                }            }            i = slash;        }        if ("".equals(host)) {            host = null;        }        if (url.startsWith("/", i)) {           // skip "/" before object name            i++;        }        if (i < url.length()) {            objName = url.substring(i);        }         // Represent object name as empty or single-component composite name.        CompositeName remaining = new CompositeName();        if (objName != null) {            remaining.add(objName);        }         // Debug        //System.out.println("host=" + host + " port=" + port +        //                 " objName=" + remaining.toString() + "\n");         // Create a registry context.        Context regCtx = new RegistryContext(host, port, env);         return (new ResolveResult(regCtx, remaining));    }}