Author: markt
Date: Mon Mar 1 23:14:12 2010
New Revision: 917784
URL: http://svn.apache.org/viewvc?rev=917784&view=rev
Log:
Correct fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=48050
NamingContext.createSubcontext method returns Context with wrong name
Modified:
tomcat/trunk/java/org/apache/naming/LocalStrings.properties
tomcat/trunk/java/org/apache/naming/NamingContext.java
Modified: tomcat/trunk/java/org/apache/naming/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/naming/LocalStrings.properties?rev=917784&r1=917783&r2=917784&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/naming/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/naming/LocalStrings.properties Mon Mar 1
23:14:12 2010
@@ -19,6 +19,7 @@
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
Modified: tomcat/trunk/java/org/apache/naming/NamingContext.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/naming/NamingContext.java?rev=917784&r1=917783&r2=917784&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/naming/NamingContext.java (original)
+++ tomcat/trunk/java/org/apache/naming/NamingContext.java Mon Mar 1 23:14:12
2010
@@ -505,11 +505,14 @@
/**
* 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
@@ -520,8 +523,25 @@
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;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]