selectorContext.noJavaUrl=This context must be accessed through a java: URL
selectorContext.methodUsingName=Call to method ''{0}'' with a Name of ''{1}''
selectorContext.methodUsingString=Call to method ''{0}'' with a String of ''{1}''
+namingContext.createSubContextInvalid=Unable to create context with name [{0}] as a sub-context of the context named [{1}]
namingContext.contextExpected=Name is not bound to a Context
namingContext.failResolvingReference=Unexpected exception resolving reference
namingContext.nameNotBound=Name {0} is not bound in this Context
/**
* Creates and binds a new context. Creates a new context with the given
- * name and binds it in the target context (that named by all but
- * terminal atomic component of the name). All intermediate contexts and
- * the target context must already exist.
+ * name and binds it in this context.
+ *
+ * @param name The name of the context to create; may not be empty. If the
+ * name consists of a single component then the sub-context is
+ * created with a prefix of the name of this context. If the
+ * name has multiple components then name.prefix(name.size()-1)
+ * must be the name of this context.
*
- * @param name the name of the context to create; may not be empty
* @return the newly created context
* @exception NameAlreadyBoundException if name is already bound
* @exception InvalidAttributesException if creation of the subcontext
throws NamingException {
checkWritable();
- Context newContext = new NamingContext(env, name.get(name.size() - 1));
- bind(name, newContext);
+ String contextName = null;
+
+ if (name.size() == 1) {
+ if (this.name.endsWith("/")) {
+ contextName = this.name + name.get(0);
+ } else {
+ contextName = this.name + "/" + name.get(0);
+ }
+ } else {
+ if (!name.getPrefix(name.size()-1).toString().equals(name)) {
+ throw new NamingException(
+ sm.getString("namingContext.createSubContextInvalid",
+ name, this.name));
+ }
+ contextName = name.toString();
+ }
+
+ Context newContext = new NamingContext(env, contextName);
+ bind(name.getSuffix(name.size() -1), newContext);
return newContext;
}