Author: kkolinko
Date: Sun Jan 17 05:17:01 2016
New Revision: 1725061
URL: http://svn.apache.org/viewvc?rev=1725061&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=57154
Support a null docBase
It is backport of r1681953, r1688854 and r1724913
Added:
tomcat/tc6.0.x/trunk/java/org/apache/naming/resources/EmptyDirContext.java
- copied, changed from r1724913,
tomcat/tc7.0.x/trunk/java/org/apache/naming/resources/EmptyDirContext.java
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1725061&r1=1725060&r2=1725061&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java Sun
Jan 17 05:17:01 2016
@@ -98,6 +98,7 @@ import org.apache.juli.logging.LogFactor
import org.apache.naming.ContextBindings;
import org.apache.naming.resources.BaseDirContext;
import org.apache.naming.resources.DirContextURLStreamHandler;
+import org.apache.naming.resources.EmptyDirContext;
import org.apache.naming.resources.FileDirContext;
import org.apache.naming.resources.ProxyDirContext;
import org.apache.naming.resources.WARDirContext;
@@ -4364,7 +4365,7 @@ public class StandardContext
((BaseDirContext) webappResources).allocate();
}
// Register the cache in JMX
- if (isCachingAllowed()) {
+ if (isCachingAllowed() && proxyDirContext.getCache() != null) {
ObjectName resourcesName =
new ObjectName(this.getDomain() + ":type=Cache,host="
+ getHostname() + ",path="
@@ -4514,10 +4515,14 @@ public class StandardContext
if (log.isDebugEnabled())
log.debug("Configuring default Resources");
try {
- if ((docBase != null) && (docBase.endsWith(".war")) && (!(new
File(getBasePath())).isDirectory()))
+ if (docBase == null) {
+ setResources(new EmptyDirContext());
+ } else if (docBase.endsWith(".war")
+ && !(new File(getBasePath())).isDirectory()) {
setResources(new WARDirContext());
- else
+ } else {
setResources(new FileDirContext());
+ }
} catch (IllegalArgumentException e) {
log.error("Error initializing resources: " + e.getMessage());
ok = false;
@@ -5169,6 +5174,10 @@ public class StandardContext
* Get base path.
*/
protected String getBasePath() {
+ if (getDocBase() == null) {
+ return null;
+ }
+
String docBase = null;
Container container = this;
while (container != null) {
Copied:
tomcat/tc6.0.x/trunk/java/org/apache/naming/resources/EmptyDirContext.java
(from r1724913,
tomcat/tc7.0.x/trunk/java/org/apache/naming/resources/EmptyDirContext.java)
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/naming/resources/EmptyDirContext.java?p2=tomcat/tc6.0.x/trunk/java/org/apache/naming/resources/EmptyDirContext.java&p1=tomcat/tc7.0.x/trunk/java/org/apache/naming/resources/EmptyDirContext.java&r1=1724913&r2=1725061&rev=1725061&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/naming/resources/EmptyDirContext.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/naming/resources/EmptyDirContext.java
Sun Jan 17 05:17:01 2016
@@ -66,297 +66,242 @@ public class EmptyDirContext implements
private final NameParser nameParser = new NameParserImpl();
- @Override
public Attributes getAttributes(Name name) throws NamingException {
return emptyAttributes;
}
- @Override
public Attributes getAttributes(String name) throws NamingException {
return emptyAttributes;
}
- @Override
public Attributes getAttributes(Name name, String[] attrIds) throws
NamingException {
return emptyAttributes;
}
- @Override
public Attributes getAttributes(String name, String[] attrIds) throws
NamingException {
return emptyAttributes;
}
- @Override
public void modifyAttributes(Name name, int mod_op, Attributes attrs)
throws NamingException {
// no op
}
- @Override
public void modifyAttributes(String name, int mod_op, Attributes attrs)
throws NamingException {
// no op
}
- @Override
public void modifyAttributes(Name name, ModificationItem[] mods) throws
NamingException {
// no op
}
- @Override
public void modifyAttributes(String name, ModificationItem[] mods) throws
NamingException {
// no op
}
- @Override
public void bind(Name name, Object obj, Attributes attrs) throws
NamingException {
// no op
}
- @Override
public void bind(String name, Object obj, Attributes attrs) throws
NamingException {
// no op
}
- @Override
public void rebind(Name name, Object obj, Attributes attrs) throws
NamingException {
// no op
}
- @Override
public void rebind(String name, Object obj, Attributes attrs) throws
NamingException {
// no op
}
- @Override
public DirContext createSubcontext(Name name, Attributes attrs) throws
NamingException {
return this;
}
- @Override
public DirContext createSubcontext(String name, Attributes attrs) throws
NamingException {
return this;
}
- @Override
public DirContext getSchema(Name name) throws NamingException {
return this;
}
- @Override
public DirContext getSchema(String name) throws NamingException {
return this;
}
- @Override
public DirContext getSchemaClassDefinition(Name name) throws
NamingException {
return this;
}
- @Override
public DirContext getSchemaClassDefinition(String name) throws
NamingException {
return this;
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<SearchResult> search(Name name, Attributes
matchingAttributes,
String[] attributesToReturn) throws NamingException {
return emptyEnum;
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<SearchResult> search(String name, Attributes
matchingAttributes,
String[] attributesToReturn) throws NamingException {
return emptyEnum;
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<SearchResult> search(Name name, Attributes
matchingAttributes)
throws NamingException {
return emptyEnum;
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<SearchResult> search(String name, Attributes
matchingAttributes)
throws NamingException {
return emptyEnum;
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<SearchResult> search(Name name, String filter,
SearchControls cons)
throws NamingException {
return emptyEnum;
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<SearchResult> search(String name, String filter,
SearchControls cons)
throws NamingException {
return emptyEnum;
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<SearchResult> search(Name name, String filterExpr,
Object[] filterArgs, SearchControls cons) throws NamingException {
return emptyEnum;
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<SearchResult> search(String name, String
filterExpr,
Object[] filterArgs, SearchControls cons) throws NamingException {
return emptyEnum;
}
- @Override
public Object lookup(Name name) throws NamingException {
throw nameNotFoundException;
}
- @Override
public Object lookup(String name) throws NamingException {
throw nameNotFoundException;
}
- @Override
public void bind(Name name, Object obj) throws NamingException {
// no op
}
- @Override
public void bind(String name, Object obj) throws NamingException {
// no op
}
- @Override
public void rebind(Name name, Object obj) throws NamingException {
// no op
}
- @Override
public void rebind(String name, Object obj) throws NamingException {
// no op
}
- @Override
public void unbind(Name name) throws NamingException {
// no op
}
- @Override
public void unbind(String name) throws NamingException {
// no op
}
- @Override
public void rename(Name oldName, Name newName) throws NamingException {
// no op
}
- @Override
public void rename(String oldName, String newName) throws NamingException {
// no op
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<NameClassPair> list(Name name) throws
NamingException {
return emptyEnum;
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<NameClassPair> list(String name) throws
NamingException {
return emptyEnum;
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<Binding> listBindings(Name name) throws
NamingException {
return emptyEnum;
}
- @Override
@SuppressWarnings("unchecked")
public NamingEnumeration<Binding> listBindings(String name) throws
NamingException {
return emptyEnum;
}
- @Override
public void destroySubcontext(Name name) throws NamingException {
// no op
}
- @Override
public void destroySubcontext(String name) throws NamingException {
// no op
}
- @Override
public Context createSubcontext(Name name) throws NamingException {
return this;
}
- @Override
public Context createSubcontext(String name) throws NamingException {
return this;
}
- @Override
public Object lookupLink(Name name) throws NamingException {
throw nameNotFoundException;
}
- @Override
public Object lookupLink(String name) throws NamingException {
throw nameNotFoundException;
}
- @Override
public NameParser getNameParser(Name name) throws NamingException {
return nameParser;
}
- @Override
public NameParser getNameParser(String name) throws NamingException {
return nameParser;
}
- @Override
public Name composeName(Name name, Name prefix) throws NamingException {
return emptyName;
}
- @Override
public String composeName(String name, String prefix) throws
NamingException {
return emptyString;
}
- @Override
public Object addToEnvironment(String propName, Object propVal) throws
NamingException {
return null;
}
- @Override
public Object removeFromEnvironment(String propName) throws
NamingException {
return null;
}
- @Override
public Hashtable<?, ?> getEnvironment() throws NamingException {
return emptyEnv;
}
- @Override
public void close() throws NamingException {
// NO OP
}
- @Override
public String getNameInNamespace() throws NamingException {
return emptyString;
}
@@ -365,27 +310,22 @@ public class EmptyDirContext implements
Enumeration<T> elements = new Vector<T>().elements();
- @Override
public T next() throws NamingException {
return nextElement();
}
- @Override
public boolean hasMore() throws NamingException {
return hasMoreElements();
}
- @Override
public void close() throws NamingException {
elements = null;
}
- @Override
public boolean hasMoreElements() {
return elements.hasMoreElements();
}
- @Override
public T nextElement() {
return elements.nextElement();
}
@@ -393,7 +333,6 @@ public class EmptyDirContext implements
static class NameParserImpl implements NameParser {
- @Override
public Name parse(String name) throws NamingException {
return emptyName;
}
Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=1725061&r1=1725060&r2=1725061&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Sun Jan 17 05:17:01 2016
@@ -52,6 +52,13 @@
Tomcat-Native DLL fails to load. (markt)
</fix>
<add>
+ <bug>57154</bug>: Add support for web applications (Context elements)
+ that do not have a docBase. This is intended for use when embedding,
+ such as Tomcat unit tests, when a web application is configured
+ programmatically and does not serve any files. Based on a patch
+ provided by Huxing Zhang. (kkolinko)
+ </add>
+ <add>
<bug>57741</bug>: Enable the CGI servlet to use the standard error page
mechanism. Note that if the CGI servlet's debug init parameter is
set to 10 or higher then the standard error page mechanism will be
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]