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&apos;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

Reply via email to