blob: 4950c21773ee351e6431570344154f42f0883e86 [file] [log] [blame]
//
// ========================================================================
// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.jndi.java;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NameParser;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.StringRefAddr;
import org.eclipse.jetty.jndi.ContextFactory;
import org.eclipse.jetty.jndi.NamingContext;
import org.eclipse.jetty.jndi.NamingUtil;
import org.eclipse.jetty.util.log.Logger;
/**
* javaRootURLContext
* <p>
* This is the root of the <code>java:</code> url namespace
* <p>
* (Thanks to Rickard Oberg for the idea of binding an ObjectFactory at "comp")
*/
public class javaRootURLContext implements Context
{
private static Logger __log = NamingUtil.__log;
public static final String URL_PREFIX = "java:";
protected Hashtable _env;
protected static NamingContext __nameRoot;
protected static NameParser __javaNameParser;
static
{
try
{
__javaNameParser = new javaNameParser();
__nameRoot = new NamingContext(null,null,null,__javaNameParser);
StringRefAddr parserAddr = new StringRefAddr("parser", __javaNameParser.getClass().getName());
Reference ref = new Reference ("javax.naming.Context",
parserAddr,
ContextFactory.class.getName(),
(String)null);
// bind special object factory at comp
__nameRoot.bind ("comp", ref);
}
catch (Exception e)
{
__log.warn(e);
}
}
/*------------------------------------------------*/
/**
* Creates a new <code>javaRootURLContext</code> instance.
*
* @param env a <code>Hashtable</code> value
*/
public javaRootURLContext(Hashtable env)
{
_env = env;
}
public Object lookup(Name name)
throws NamingException
{
return getRoot().lookup(stripProtocol(name));
}
public Object lookup(String name)
throws NamingException
{
return getRoot().lookup(stripProtocol(name));
}
public void bind(Name name, Object obj)
throws NamingException
{
getRoot().bind(stripProtocol(name), obj);
}
public void bind(String name, Object obj)
throws NamingException
{
getRoot().bind(stripProtocol(name), obj);
}
public void unbind (String name)
throws NamingException
{
getRoot().unbind(stripProtocol(name));
}
public void unbind (Name name)
throws NamingException
{
getRoot().unbind(stripProtocol(name));
}
public void rename (String oldStr, String newStr)
throws NamingException
{
getRoot().rename (stripProtocol(oldStr), stripProtocol(newStr));
}
public void rename (Name oldName, Name newName)
throws NamingException
{
getRoot().rename (stripProtocol(oldName), stripProtocol(newName));
}
public void rebind (Name name, Object obj)
throws NamingException
{
getRoot().rebind(stripProtocol(name), obj);
}
public void rebind (String name, Object obj)
throws NamingException
{
getRoot().rebind(stripProtocol(name), obj);
}
public Object lookupLink (Name name)
throws NamingException
{
return getRoot().lookupLink(stripProtocol(name));
}
public Object lookupLink (String name)
throws NamingException
{
return getRoot().lookupLink(stripProtocol(name));
}
public Context createSubcontext (Name name)
throws NamingException
{
return getRoot().createSubcontext(stripProtocol(name));
}
public Context createSubcontext (String name)
throws NamingException
{
return getRoot().createSubcontext(stripProtocol(name));
}
public void destroySubcontext (Name name)
throws NamingException
{
getRoot().destroySubcontext(stripProtocol(name));
}
public void destroySubcontext (String name)
throws NamingException
{
getRoot().destroySubcontext(stripProtocol(name));
}
public NamingEnumeration list(Name name)
throws NamingException
{
return getRoot().list(stripProtocol(name));
}
public NamingEnumeration list(String name)
throws NamingException
{
return getRoot().list(stripProtocol(name));
}
public NamingEnumeration listBindings(Name name)
throws NamingException
{
return getRoot().listBindings(stripProtocol(name));
}
public NamingEnumeration listBindings(String name)
throws NamingException
{
return getRoot().listBindings(stripProtocol(name));
}
public Name composeName (Name name,
Name prefix)
throws NamingException
{
return getRoot().composeName(name, prefix);
}
public String composeName (String name,
String prefix)
throws NamingException
{
return getRoot().composeName(name, prefix);
}
public void close ()
throws NamingException
{
}
public String getNameInNamespace ()
throws NamingException
{
return URL_PREFIX;
}
public NameParser getNameParser (Name name)
throws NamingException
{
return __javaNameParser;
}
public NameParser getNameParser (String name)
throws NamingException
{
return __javaNameParser;
}
public Object addToEnvironment(String propName,
Object propVal)
throws NamingException
{
return _env.put (propName,propVal);
}
public Object removeFromEnvironment(String propName)
throws NamingException
{
return _env.remove (propName);
}
public Hashtable getEnvironment ()
{
return _env;
}
public static NamingContext getRoot ()
{
return __nameRoot;
}
protected Name stripProtocol (Name name)
throws NamingException
{
if ((name != null) && (name.size() > 0))
{
String head = name.get(0);
if(__log.isDebugEnabled())__log.debug("Head element of name is: "+head);
if (head.startsWith(URL_PREFIX))
{
head = head.substring (URL_PREFIX.length());
name.remove(0);
if (head.length() > 0)
name.add(0, head);
if(__log.isDebugEnabled())__log.debug("name modified to "+name.toString());
}
}
return name;
}
protected String stripProtocol (String name)
{
String newName = name;
if ((name != null) && (!name.equals("")))
{
if (name.startsWith(URL_PREFIX))
newName = name.substring(URL_PREFIX.length());
}
return newName;
}
}