You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by vi...@apache.org on 2013/08/28 10:12:46 UTC
svn commit: r1518097 - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/catalina/startup/Tomcat.java
test/org/apache/catalina/startup/TestTomcat.java webapps/docs/changelog.xml
Author: violetagg
Date: Wed Aug 28 08:12:46 2013
New Revision: 1518097
URL: http://svn.apache.org/r1518097
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51526
Merged revision 1517941 from tomcat/trunk:
o.a.catalina.startup.Tomcat.addWebapp(...) will process web application's context.xml when it is presented in the provided baseDir.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/Tomcat.java
tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestTomcat.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1517941
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/Tomcat.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/Tomcat.java?rev=1518097&r1=1518096&r2=1518097&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/Tomcat.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/Tomcat.java Wed Aug 28 08:12:46 2013
@@ -18,12 +18,16 @@ package org.apache.catalina.startup;
import java.io.File;
import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.security.Principal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -187,13 +191,15 @@ public class Tomcat {
hostname = s;
}
- /**
- * Add a webapp using normal WEB-INF/web.xml if found.
- *
- * @param contextPath
- * @param baseDir
- * @return new Context
- * @throws ServletException
+ /**
+ * This is equivalent to adding a web application to Tomcat's webapps
+ * directory. The equivalent of the default web.xml will be applied to the
+ * web application and any WEB-INF/web.xml and META-INF/context.xml packaged
+ * with the application will be processed normally. Normal web fragment and
+ * {@link javax.servlet.ServletContainerInitializer} processing will be
+ * applied.
+ *
+ * @throws ServletException
*/
public Context addWebapp(String contextPath,
String baseDir) throws ServletException {
@@ -529,7 +535,8 @@ public class Tomcat {
ctx.setDocBase(path);
ctx.addLifecycleListener(new DefaultWebXmlListener());
-
+ ctx.setConfigFile(getWebappConfigFile(path, url));
+
ContextConfig ctxCfg = new ContextConfig();
ctx.addLifecycleListener(ctxCfg);
@@ -676,16 +683,20 @@ public class Tomcat {
}
private void silence(Host host, String ctx) {
- String base = "org.apache.catalina.core.ContainerBase.[default].[";
+ Logger.getLogger(getLoggerName(host, ctx)).setLevel(Level.WARNING);
+ }
+
+ private String getLoggerName(Host host, String ctx) {
+ String loggerName = "org.apache.catalina.core.ContainerBase.[default].[";
if (host == null) {
- base += getHost().getName();
+ loggerName += getHost().getName();
} else {
- base += host.getName();
+ loggerName += host.getName();
}
- base += "].[";
- base += ctx;
- base += "]";
- Logger.getLogger(base).setLevel(Level.WARNING);
+ loggerName += "].[";
+ loggerName += ctx;
+ loggerName += "]";
+ return loggerName;
}
/**
@@ -1054,4 +1065,52 @@ public class Tomcat {
"z", "application/x-compress",
"zip", "application/zip"
};
+
+ protected URL getWebappConfigFile(String path, String url) {
+ File docBase = new File(path);
+ if (docBase.isDirectory()) {
+ return getWebappConfigFileFromDirectory(docBase, url);
+ } else {
+ return getWebappConfigFileFromJar(docBase, url);
+ }
+ }
+
+ private URL getWebappConfigFileFromDirectory(File docBase, String url) {
+ URL result = null;
+ File webAppContextXml = new File(docBase, Constants.ApplicationContextXml);
+ if (webAppContextXml.exists()) {
+ try {
+ result = webAppContextXml.toURI().toURL();
+ } catch (MalformedURLException e) {
+ Logger.getLogger(getLoggerName(getHost(), url)).log(Level.WARNING,
+ "Unable to determine web application context.xml " + docBase, e);
+ }
+ }
+ return result;
+ }
+
+ private URL getWebappConfigFileFromJar(File docBase, String url) {
+ URL result = null;
+ JarFile jar = null;
+ try {
+ jar = new JarFile(docBase);
+ JarEntry entry = jar.getJarEntry(Constants.ApplicationContextXml);
+ if (entry != null) {
+ result = new URL("jar:" + docBase.toURI().toString() + "!/"
+ + Constants.ApplicationContextXml);
+ }
+ } catch (IOException e) {
+ Logger.getLogger(getLoggerName(getHost(), url)).log(Level.WARNING,
+ "Unable to determine web application context.xml " + docBase, e);
+ } finally {
+ if (jar != null) {
+ try {
+ jar.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+ return result;
+ }
}
Modified: tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestTomcat.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestTomcat.java?rev=1518097&r1=1518096&r2=1518097&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestTomcat.java (original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestTomcat.java Wed Aug 28 08:12:46 2013
@@ -40,6 +40,7 @@ import javax.servlet.http.HttpServletRes
import javax.servlet.http.HttpSession;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -49,6 +50,7 @@ import org.apache.catalina.deploy.Contex
import org.apache.catalina.deploy.ContextResourceLink;
import org.apache.catalina.realm.GenericPrincipal;
import org.apache.catalina.realm.RealmBase;
+import org.apache.catalina.core.StandardContext;
import org.apache.tomcat.util.buf.ByteChunk;
public class TestTomcat extends TomcatBaseTest {
@@ -447,4 +449,41 @@ public class TestTomcat extends TomcatBa
assertEquals(1, initCount.getCallCount());
}
+
+ @Test
+ public void testGetWebappConfigFileFromDirectory() {
+ Tomcat tomcat = new Tomcat();
+ assertNotNull(tomcat.getWebappConfigFile("test/deployment/dirContext", ""));
+ }
+
+ @Test
+ public void testGetWebappConfigFileFromDirectoryNegative() {
+ Tomcat tomcat = new Tomcat();
+ assertNull(tomcat.getWebappConfigFile("test/deployment/dirNoContext", ""));
+ }
+
+ @Test
+ public void testGetWebappConfigFileFromJar() {
+ Tomcat tomcat = new Tomcat();
+ assertNotNull(tomcat.getWebappConfigFile("test/deployment/context.war", ""));
+ }
+
+ @Test
+ public void testGetWebappConfigFileFromJarNegative() {
+ Tomcat tomcat = new Tomcat();
+ assertNull(tomcat.getWebappConfigFile("test/deployment/noContext.war", ""));
+ }
+
+ @Test
+ public void testBug51526() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ File appFile = new File("test/deployment/context.war");
+ StandardContext context = (StandardContext) tomcat.addWebapp(null, "/test",
+ appFile.getAbsolutePath());
+
+ tomcat.start();
+
+ assertEquals("WAR_CONTEXT", context.getSessionCookieName());
+ }
}
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1518097&r1=1518096&r2=1518097&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Wed Aug 28 08:12:46 2013
@@ -58,6 +58,11 @@
<section name="Tomcat 7.0.43 (markt)">
<subsection name="Catalina">
<changelog>
+ <add>
+ <bug>51526</bug>: <code>o.a.catalina.startup.Tomcat#addWebapp</code>
+ methods now process the web application's <code>META-INF/context.xml</code>
+ when it is available in the provided path. (violetagg)
+ </add>
<fix>
<bug>55186</bug>: Ensure local name is recycled between requests so IP
virtual hosting works correctly. (markt)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org