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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org